其实快速排序的本质就是把基准数大的都放在基准数的右边,把比基准数小的放在基准数的左边,这样就找到了该数据在数组中的正确位置.
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
void printArray(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 = 0;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
//划分过程 第一个元素当作基准,分成两个部分,左边比基准小,右边比基准大
int partition(int array[],int low, int high)
{
int pv = array[low];
while(low < high)
{
while((low<high)&&(array[high]>=pv))
{
high--; //比基准大,本来就在基准的右边,所以high前移一位
}
Swap(array, low, high);
while((low<high)&&(array[low] <=pv))
{
low++; //比基准小,本来就在基准的左边,所以low后移一位
}
Swap(array, low, high);
}
//返回基准值的位置 这一点非常重要
return low;
}
void QSort(int array[], int low, int high)
{
int part = 0;
if(low < high)
{
//先选定一个基准值
part = partition(array, low, high);
//对子序列1排序
QSort(array, low, part-1);
//对子序列2排序
QSort(array, part+1, high);
}
}
void QuickSort(int array[], int len)
{
QSort(array, 0, len-1);
}
int main()
{
int arr[] = {2,4,1,5,7,3};
int len = sizeof(arr)/sizeof(arr[0]);
printf("%d\n", len);
printArray(arr, len);
QuickSort(arr, len);
printArray(arr, len);
return 0;
}