#include <stdio.h>
void println(int array[], int len)
{
int i = 0;
for(i=0; i<len; i++)
{
printf("%d ", array[i]);
}
printf("\n");
}
void swap(int array[], int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
int partion(int* array,int low,int high)//分组
{
int pv = array[low];
while(low < high){//找到一个基准点,使得左边 < 基准点 < 右边
while((low < high) && (array[high] >= pv)){
high--;
}
swap(array,low,high);
while((low < high) && (array[low] <= pv)){
low++;
}
swap(array,low,high);
}
return low;//基准点的下标
}
void Qsort(int* array,int low,int high)//递归地找到每一小段的基准点 ,实际上就是在排序
{
if(low < high){
int pv1 = partion(array,low,high);//第一个基准点
Qsort(array,low,pv1-1);//找左半部分基准点
Qsort(array,pv1+1,high);//找有半部分
}
}
void QuickSort(int* array,int len)
{
Qsort(array,0,len-1);//下限是第一个元素的下标0.上线时最后一个元素的下标len-1
}
int main()
{
int array[] = {21, 25, 49, 25, 16, 8};
int len = sizeof(array) / sizeof(*array);
println(array, len);
QuickSort(array, len);
println(array, len);
return 0;
}
快速排序
最新推荐文章于 2018-06-07 17:23:53 发布