之前对快排还稍有疑问,今天特意认真的学习了一下,算是彻底的大彻大悟了吧,所以今天特意分享一下。
快排的话有两个函数,一个函数是找到一个标准值,使标准值左边的都比标准值小,标准值右边的都比标准值大,
另一个就是快排的函数了,每调用一次快排的函数就将确定标准值的位置,如此循环往复,最终也就确定了最终的排序。
代码如下:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int Sort(int arr[],int nLow,int nHigh)
{
int nSmall=nLow-1;
for(nLow;nLow<nHigh;nLow++)
{
if(arr[nLow]<arr[nHigh])
{
if(++nSmall!=nLow)
{
arr[nSmall]=arr[nSmall]^arr[nLow];
arr[nLow]=arr[nSmall]^arr[nLow];
arr[nSmall]=arr[nSmall]^arr[nLow];
}
}
}
if(++nSmall!=nHigh)
{
arr[nSmall]=arr[nSmall]^arr[nHigh];
arr[nHigh]=arr[nSmall]^arr[nHigh];
arr[nSmall]=arr[nSmall]^arr[nHigh];
}
return nSmall;
}
void QuickSort(int arr[],int nLow,int nHigh)
{
if(arr==NULL||nLow>=nHigh)
return;
int nStand=Sort(arr,nLow,nHigh);
QuickSort(arr,nLow,nStand-1);
QuickSort(arr,nStand+1,nHigh);
}
int main()
{
int arr[]={1,5,4,3,6,8,7,5,2,6,5};
QuickSort(arr,0,sizeof(arr)/sizeof(int)-1);
for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}