#include <stdio.h>
// 交换函数
void mySwap(int *a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
// 打印函数
void myPrint(int *a, int len)
{
int i;
for (i = 0; i < len; i++)
printf("%4d", a[i]);
printf("\n");
}
// 鸡尾酒排序函数
void Cocktail_Sort(int *a, int len)
{
int left = 0;
int right = len-1;
int i;
while (left < right)
{
// 从左往右走,找最大元素沉底
for (i = left; i < right; i++)
if (a[i] > a[i+1])
mySwap(a, i, i+1);
right--;
// 从右往左走,找最小元素上浮
for (i = right; i > left; i--)
if (a[i] < a[i-1])
mySwap(a, i, i-1);
left++;
}
}
// 鸡尾酒排序函数(递归实现)
void Cocktail_Sort1(int *a, int left, int right)
{
if (left >= right)
return;
int i;
// 从左往右走,找最大元素沉底
for (i = left; i < right; i++)
if (a[i] > a[i+1])
mySwap(a, i, i+1);
right--;
// 从右往左走,找最小元素上浮
for (i = right; i > left; i--)
if (a[i] < a[i-1])
mySwap(a, i, i-1);
// left++;
Cocktail_Sort1(a, left++, right);
}
int main()
{
int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int len = sizeof arr / sizeof(int);
Cocktail_Sort(arr, len);
// Cocktail_Sort1(arr, 0, len-1);
myPrint(arr, len);
return 0;
}