鸡尾酒排序 Cocktail sort

鸡尾酒排序基于冒泡排序,双向循环,还是看例子吧,给定待排数组[2 3 4 5 1]

第一趟过去时的每一步

第一步迭代:2 < 3不换[2 3 4 5 1]

第二步迭代:3 < 4不换[2 3 4 5 1]

第三步迭代:4 < 5不换[2 3 4 5 1]

第四步迭代:5 > 1交换[2 3 4 1 5]

第一趟回来时的第一步,鸡尾酒一次到头后就回返回来,再到头后再过去,来回比,一个来回能排两个数字

第五步迭代:1 < 5不交换[2 3 4 1 5]

第六步迭代:1 < 4交换[2 3 1 4 5]

第七步迭代:1 < 3交换[2 1 3 4 5]

第八步迭代:2 > 1交换[1 2 3 4 5]

排序完毕,顺序输出结果即可得[ 1 2 3 4 5]

如何判断排序结束了?

假如一趟来回没有交换任何数字,则表示该数组已经有序了,可以设置了个变量表示有没有交换过

代码仅供参考

static void cocktail_sort(int[] unsorted) 
{
	bool swapped = false;
	do 
	{
		for (int i = 0; i < unsorted.Length - 1; i++) 
		{
			if (unsorted[i] > unsorted[i + 1]) 
			{
				int temp = unsorted[i];
				unsorted[i] = unsorted[i + 1];
				unsorted[i + 1] = temp;
				swapped = true;
			}
		}
		swapped = false;
		for (int j = unsorted.Length; j > 1; j--) 
		{
			if (unsorted[j] < unsorted[j - 1]) 
			{
				int temp = unsorted[j];
				unsorted[j] = unsorted[j - 1];
				unsorted[j - 1] = temp;
				swapped = true;
			}
		}
	}
	while (swapped);
}
static void Main(string[] args) 
{
	int[] x = { 6, 2, 4, 1, 5, 9 };
	selection_sort(x);
	foreach (var item in x) 
	{
		Console.WriteLine(item);
	}
	Console.ReadLine();
}
软件开发

冒泡排序 Bubble sort

2021-11-27 14:15:13

软件开发

插入排序 Insertion sort

2021-11-29 9:11:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索