看了这片文章,确实非常形象,http://blog.csdn.net/morewindows/article/details/6684558
QuickSort:找一个标准值(枢轴),将比标准值小的放到左侧,比标准值大的放在它右侧,根据标准值位置将当前数据分割成两部分,两部分分别重复以上以上操作
#include<stdio.h>
int Sort(int arr[],int nLow,int nHigh)
{
int temp;
temp = arr[nLow];
while(nLow < nHigh)
{
//从后向前找比标准值小的
while(nHigh > nLow)
{
//找到了
if(arr[nHigh] < temp)
{
//放到前面的坑
arr[nLow] = arr[nHigh];
nLow++;
break;
}
nHigh--;
}
//从前向后找比标准值大的
while(nLow < nHigh)
{
if(arr[nLow] > temp)
{
arr[nHigh] = arr[nLow];
nHigh--;
break;
}
nLow++;
}
}
//标准值放入
arr[nLow] = temp;
return nLow;
}
void QuickSort(int arr[],int nLow,int nHigh)
{
if(arr == NULL || nLow >= nHigh )return;
//1.标准值
int nStandard;
nStandard = Sort1(arr,nLow,nHigh);
//2.分割
QuickSort(arr,nLow,nStandard-1);
QuickSort(arr,nStandard+1,nHigh);
}
void Print(int arr[],int nLength)
{
if(arr == NULL || nLength <= 0)return;
int i;
for(i = 0;i<nLength;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = {10,2,8,9,1,64,3,8,91};
QuickSort(arr,0,sizeof(arr)/sizeof(arr[0])-1);
Print(arr,sizeof(arr)/sizeof(arr[0]));
return 0;
}