工具人:flag pivot
思路:二分法,不断找出子序列的中间值,确保小的在左,大的在右
代码实现:
1.排序方法:
int Partition(int a[],int low,int high){
int flag=a[low];
while (low<high)
{
while(low<high&&flag<=a[high]) high--;
a[low]=a[high];
while(low<high&&flag>=a[low]) low++;
a[high]=a[low];
}
a[low]=flag;
return low;
}
void QuickSort(int a[],int n,int low,int high){
if(low<high){
int pivot=Partition(a,low,high);
QuickSort(a,pivot+1,low,pivot-1);
QuickSort(a,n-(pivot+1),pivot+1,high);
}
}
2.主函数
int main(){
int a[]={49,37,49,31,78,50,56,27,60,40,49,33};
QuickSort(a,12,0,11);
for(int i=0;i<12;i++){
printf("%d ",a[i]);
}
}
3.运行结果
27 31 33 37 40 49 49 49 50 56 60 78