用了这么多,感觉还是递归最简单最好用,下面介绍下递归实现快速排序,它在很多公司笔试题中也有考到
#include <stdio.h>
int FindSite(int *arr, int low, int high)
{
int flag=arr[low]; //将需要查找位置的第一个数字赋值给flag;
int *tmp = arr;
while (low < high)//边界条件;
{
while ((low<high) && (tmp[high] >= flag))//当高位大于等于flag标志位时,应该将高位<<右移;
{
--high;//右移;
}
if (low < high)
{
tmp[low] = tmp[high];//当高位小于flag时,赋值给低位;
}
while ((low<high) && (tmp[low] <= flag))//当低位小于等于flag标志位时,应该将低位>>左移;
{
++low;//左移;
}
if (low < high)
{
tmp[high] = tmp[low];//当低位大于flag时,赋值给高位;
}
}
tmp[low] = flag;//当low和high重合时,位置找到,将需要查找的数放进位置。
return low;//将这个位置返回给排序函数;
}
void QuickSort(int *arr, int low, int high)
{
int pow=0;//设置位置标志;
if (low<high)
{
pow = FindSite(arr,low, high);//该位置将原来的线性数据分成两半;
QuickSort(arr, low, pow-1);//再将左边的数据查找切分;
QuickSort(arr, pow+1,high);//再将右边的数据查找切分;
}
}
int main()
{
int i = 0;
int Array[] = { 79, 1, -3, 56, 22, 22, 7, 22, 4, 8, -1, 2 ,-1};
printf("The original data is:\n");
for (i = 0; i < sizeof(Array) / sizeof(int); i++)
{
printf("%d ", Array[i]);
}
printf("\n");
QuickSort(Array, 0, sizeof(Array) / sizeof(int)-1);
printf("The number after reordering is:\n");
for (i = 0; i < sizeof(Array) / sizeof(int); i++)
{
printf("%d ", Array[i]);
}
printf("\n");
return 0;
}