快速排序C语言
#include<stdio.h>
void swap(int a[],int low,int high){
int temp=a[low];
a[low]=a[high];
a[high]=temp;
}
int CountPivot(int a[],int low,int high){
int pivot=a[low];
while(low<high){ //注意当两指针重合时不满足while
while(low<high && a[high]>=pivot){//此处的low<high是防止右边向左移动次数过多导致小于low;左边第一个数字被当作pivot,则从右边比起
high--; //大于枢纽值则不需要调换,只需把指针向左移动一个位置
} //至于为何用while而不用if,可根据动画观察出例如第一次判断右边的值不需要调换,则会判断第二次第三次。因此用while。
swap(a,low,high); //如果右边的数不大于枢纽值,则需要调换 。
while(low<high && a[low]<=pivot){
low++;
}
swap(a,low,high);
}
return low; //两指针重合,返回pivot
}
void QuickSort(int a[],int low,int high){
if(low<high){
int pivot=CountPivot(a,low,high);
QuickSort(a,low,pivot-1);
QuickSort(a,pivot+1,high);
}
}
int main(){
int i;
int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int N=12;
QuickSort(a,0,N-1);
for(int i=0;i<N;i++){
printf("%d ",a[i]);
}
return 0;
}