鸡尾酒排序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;
}