#include <stdio.h>
/** 鸡尾酒排序:若待排序数组为{2,3,4,5,6,7,8,1},发现2-8是有序的,
* 只因为1需要进行7轮排序比较,鸡尾酒排序可以解决这种问题,
* 以先从左排序,再右排序(类似钟摆)
*/
int CocktaiSort(int *array, int len)
{
if (array == NULL)
return -1;
int i = 0;
int j = 0;
int temp = 0;
for (i = 0; i < len / 2; i++)
{
int isSorted = 1;
/** 奇数轮,从左到右进行一轮比较和交换,j初始值为i是因为,
* 偶数轮比较会将左边变为有序,下次无序再次0位开始比较
*/
for (j = i; j < len - i - 1; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
isSorted = 0;
}
}
if (isSorted)
{
break;
}
// 偶数轮,从由右到左进行比较和交换
isSorted = 1;
for (j = len - i - 1; j > i; j--)
{
if (array[j] < array[j - 1])
{
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
isSorted = 0;
}
}
if (isSorted)
{
break;
}
}
return 0;
}
int main()
{
int i = 0;
int array[8] = {2, 3, 4, 5, 6, 7, 8, 1};
CocktaiSort(array, 8);
for (i = 0; i < 8; i++)
{
printf("%d ", array[i]);
}
return 0;
}
鸡尾酒排序
最新推荐文章于 2022-08-22 20:13:42 发布