#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;
}
int Sort2(int arr[],int nLow,int nHigh)
{
int nSmall = nLow-1;
for(nLow;nLow < nHigh;nLow++)
{
//找小的
if(arr[nLow] < arr[nHigh])
{
//小区间扩张
if(++nSmall != nLow)
{
arr[nLow] = arr[nLow]^arr[nSmall];
arr[nSmall] = arr[nLow]^arr[nSmall];
arr[nLow] = arr[nLow]^arr[nSmall];
}
}
}
//标准值放入
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;
//1.标准值
int nStandard;
nStandard = Sort2(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;
}
快速排序----区间分割法
猜你喜欢
转载自blog.csdn.net/weixin_44656803/article/details/105046200
今日推荐
周排行