数据结构排序法之鸡尾酒排序法he快速排序法

来源:互联网 发布:网络乞丐mc吴迪伴奏 编辑:程序博客网 时间:2024/05/21 07:37

鸡尾酒排序,也叫定向冒泡排序,是冒泡排序的一种改进。此算法与冒泡排序的不同处在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能。

// 两两互换void swap (int* a, int i, int j){    int tmp;    tmp  = a[i];    a[i] = a[j];    a[j] = tmp;}// 鸡尾酒法void tail1 (int* a, int len){    // 初始化边界    int left  = 0;    int right = len - 1;    int i;    while (left < right)    {        // 前半轮将最大元素放到最后面        for (i = left; i < right; i++)        {            if (a[i] > a[i+1])            {                swap (a, i, i+1);            }        }        right--;                        // 右边界左移一位        // 后半轮将最小元素放到最前面        for (i = right; i > left; i--)        {            if (a[i-1] > a[i])            {                swap (a, i, i-1);            }        }        left++;                     // 左边界右移一位    }   }

快速排序(Quicksort)是对冒泡排序的一种改进。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

// 两两互换void swap (int* a, int i, int j){    int tmp;    tmp  = a[i];    a[i] = a[j];    a[j] = tmp;}// 分区操作,返回基准值的下标int partition(int *a, int left, int right){    int pivot = a[right];    int index = left;       // 如果找到一个比基准值小的元素,与下标为index的元素交换    int i;    for (i = left; i < right; i++)    {        if (a[i] < pivot)        {            swap (a, i, index);            index++;        }    }    swap (a, index, right);    return index;   // 基准值所在位置下标}void qSort(int *a, int left, int right){    if (left < right)    {        int pivot = partition(a, left, right);  // 进行分区操作,找基准值下标        qSort (a, left, pivot-1);     // 对左边部分进行快速排序        qSort (a, pivot+1, right);    // 对右边部分进行快速排序        }}
原创粉丝点击