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

posted @ 2019-08-06 12:10  天真王二小  阅读(227)  评论(0编辑  收藏  举报