/*
*设置两个指针:i和j,分别指向第一个和最后一个,
*i像后移动,j向前移动,选第一个数为标准(快排的关键就是这个“标准”的选取,一般选取第一个数为标准数),
*从后面开始,找到第一个比标准小的数,互换位置,然后再从前面,
*找到第一个比标准大的数,互换位置,第一趟的结果就是标准左边的都小于标准,
*右边的都大于标准(但不一定有序),分成两拨后,继续递归的使用上述方法,最终可以达到有序状态!
*/
#include <stdio.h>
int partition(int array[],int low,int high)
{
int key = array[low];
while (low < high)
{
while(low < high && array[high] >= key)
{
high--;
}
array[low] = array[high];
while (low < high && array[low] <= key)
{
low++;
}
array[high] = array[low];
}
array[high] = key;
return high;
}
void quickSort(int data[],int low,int high)
{
if (low < high)
{
int result = partition(data,low,high);
quickSort(data,low,result-1);
quickSort(data,result+1,high);
}
}
int main()
{
int data[]={9, 2, 7, 19, 100, 97, 63, 208, 55, 78};
printf("----------快速排序----------\n");
for (int i=0;i<sizeof(data)/sizeof(int);i++)
{
printf("%d ",data[i]);
}
printf("\n");
quickSort(data,0,sizeof(data)/4-1);
for (int i=0;i<sizeof(data)/sizeof(int);i++)
{
printf("%d ",data[i]);
}
return 0;
}
快速排序C语言实现
最新推荐文章于 2024-07-11 23:47:11 发布