#include <stdio.h>
//quick sort
void QuickSort(int *a, int l, int r)
{
if(l < r)
{
int i = l, j = r, x = a[i]; //在a[i]处挖坑,等待小于他的填入
while(i < j)
{
while(i < j && x <= a[j])
j--;
if(i < j)
a[i++] = a[j]; //在a[i]的坑处填入a[j],a[j]处待大于她的填入
while(i < j && x >= a[i])
i++;
if(i < j)
a[j--] = a[i]; //在a[j]的坑处填入a[i]
}
}
a[i] = x;
QuickSort(a, l, i - 1);
QuickSort(a, i + 1, r);
}
void SelectionSort(int *a, int n)
{
int min;
for(int i = 0; i < n - 1; i++)
{
min = i;
for(int j = i + 1; j < n; j++)
{
if(a[min] > a[j])
min = j;
}
if(min != i)
{
a[min] ^= a[i];
a[i] ^= a[min];
a[min] ^= a[i];
}
}
}
void BubbleSort(int *a, int n)
{
for(int i = 0; i < n - 1; i++)
{
for(int j = 0; j < n - 1 - i; j++) //将最大值“浮”放在最后的位置
{
if(a[j] > a[j + 1])
{
a[j] ^= a[j + 1];
a[j + 1] ^= a[j];
a[j] ^= a[j + 1];
}
}
}
}
void CockTailSort(int *a, int n)
{
int letf = 0;
int right = n - 1;
while(left < right)
{
for(int i = left; i < right; i++)//将较大值放在后边
{
if(a[i] > a[i + 1])
{
a[i] ^= a[i + 1];
a[i + 1] ^= a[i];
a[i] ^= a[i + 1];
}
}
right--;
for(int i = right; i > letf; i--)//将较小值放在前边
{
if(a[i - 1] > a[i])
{
a[i] ^= a[i - 1];
a[i - 1] ^= a[i];
a[i] ^= a[i - 1];
}
}
letf++;
}
}
void InsertSort(int *a, int n)
{
int get, j;
for(int i = 1; i < n; i++)
{
get = a[i];//取值,在a[i]处挖坑,等着将小于此值的元素后移一位填坑
j = i - 1;
while(j >= 0 && get < a[j])
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = get; //填坑
}
}
|
插入排序上述代码对序列{ 6, 5, 3, 1, 8, 7, 2, 4 }进行插入排序的实现过程如下:
int main()
{
int Arr[] = {2, 1, 9, 10, 3, 11, 20, 30, 19, 12, 1};
int len = sizeof(Arr) / sizeof(*Arr);
printf("Before Sorting:\n");
for (int i = 0; i < len; i++)
printf("%d ", Arr[i]);
printf("\n");
//QuickSort(Arr, 0, len - 1);
//SelectionSort(Arr, len);
//BubbleSort(Arr, len);
CocktailSort(Arr, len);
printf("After Sorting:\n");
for (int i = 0; i < len; i++)
printf("%d ", Arr[i]);
printf("\n");
return 0;
}