交换排序

来源:互联网 发布:软件设计师官网 编辑:程序博客网 时间:2024/04/30 10:40

交换排序的基本思想:
两两比较待排序元素,发现倒序则交换。

交换排序包括:
(1)冒泡排序
(2)快速排序

关于交换排序算法的时间复杂度和稳定性请见该博文:http://blog.csdn.net/learn_sunzhuli/article/details/47068295

算法由C++实现的代码如下,已经在 vs2010上测试通过

#include <iostream>using namespace std;void BubbleSort(int arr[], int len){    bool isFinished;  //添加标志位,判断排序是否提前结束    for(int i = 0; i < len; i++)    {        isFinished = true;        for(int j = 0; j < len - i - 1; j++)        {            if(arr[j] > arr[j + 1])            {                swap(arr[j], arr[j + 1]);                isFinished = false;            }        }        if(isFinished)            return;    }}//cutPoint为引用型变量,因为它的改变值要返回给QuickSort()函数中的实参void GetCutpoint(int arr[], int startPoint, int endPoint, int& cutPoint)//引用型参数{    int front = startPoint;    int rear = endPoint;    int currentValue = arr[front];//空出一个位置    while(front != rear)    {        //考虑极端情况,即原序列已经有序、        //思考 front < rear 该判断条件的意义        while(front < rear && arr[rear] > currentValue)            rear--;        if(front < rear)        {            arr[front] = arr[rear];//空出一个位置            front++;        }        while(front < rear && arr[front] < currentValue)             front++;        if(front < rear)        {            arr[rear] = arr[front];            rear--;        }    }    arr[front] = currentValue;    cutPoint = front;}void QuickSort(int arr[], int startPoint, int endPoint)//递归排序{    int cutpoint;    if(startPoint < endPoint)    {        GetCutpoint(arr, startPoint, endPoint, cutpoint);        QuickSort(arr, startPoint, cutpoint - 1);//arr[cutpoint]位置已经确定,不再参与排序        QuickSort(arr, cutpoint + 1, endPoint);    }}int _tmain(int argc, _TCHAR* argv[]){    int arr[] = {1, 3, 5, 6, 9, 8, 7, 2, 4, 0};    int len = sizeof(arr) / sizeof(arr[0]);     //BubbleSort(arr, len);     QuickSort(arr, 0, len - 1);    //输出排序后结果    for(int i = 0; i < len; i++)        cout<<arr[i]<<" ";    cout<<endl;    return 0;}

排序后,数组元素按照从小到大顺序依次输出,由于数组元素已经明确给出,则不在给出排序结果截图。

0 0
原创粉丝点击