鸡尾酒排序Cocktail Sort (双向冒泡排序)

鸡尾酒排序

鸡尾酒排序思路,先从左边开始进行冒泡排序,第一趟冒泡排序完,最大值在的数组的最右端,然后进行第二趟排序,第二趟排序从右边开始排序,第二趟结束时,最小值在数组最左端,以此类推,每一趟排序完都能将一个在当前数组(不包括之前排序得到的最大或者最小的数)中最小或者最大的数放在对应的位置。

算法过程

代码实现

#include <iostream>

using namespace std;

void Swap(int array[], int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

void cocktailSort(int array[], int length)
{
    if (array == nullptr || length <= 0)
        return;
    int left = 0;
    int right = length - 1;
    while (left < right)
    {
        //第一次 左边开始 
        for (int i = left; i < right; i++)
        {
            if (array[i] > array[i + 1])
            {
                Swap(array, i, i + 1);      //左边大于右边,交换
            }
        }
        //第二次 右边开始
        right--;
        for (int i = right; i > left; i--)
        {
            if (array[i - 1] > array[i])
                Swap(array, i - 1, i);      //左边大于右边, 交换
        }
        left++;
    }
}
int main()
{
    int arr[] = { 5,9,8,7,6 };
    int length = sizeof(arr) / sizeof(int);
    cocktailSort(arr, length);
    for (int i = 0; i < length; i++)
        cout << arr[i] << " ";
    cout << endl;
}

猜你喜欢

转载自www.cnblogs.com/izzwhf/p/11275446.html