#include<stdio.h>
void swap(int a[],int low,int high) {
int temp;
temp = a[low];
a[low] = a[high];
a[high] = temp;
}
int Partition(int a[],int low,int high) {
int point;
// 优化point的初始值
int m = low + (high - low) /2;
if (a[low]>a[high]) {
swap(a,low,high);
}
if (a[m]>a[high]){
swap(a,m,high);
}
if(a[m]>a[low]){
swap(a,m,low);
}
point = a[low];
while(low<high) {
while(low<high&&a[high] >= point){
high--;
}
// 优化交换
a[low] = a[high];
while(low<high&&a[low] <= point){
low++;
}
a[high] = a[low];
}
a[low] = point;
return low;
}
void QSort(int a[],int low, int high) {
int point;
if( low < high ){
point = Partition(a,low,high);
QSort(a,low,point-1);
QSort(a,point+1,high);
}
}
void QuickSort(int a[], int n) {
QSort(a,0,n-1);
}
int main() {
int i;
int a[10] = {9,8,7,6,5,4,3,2,1,0};
printf("排序后:");
QuickSort(a,10);
for( i=0; i<10; i++) {
printf("%d ",a[i]);
}
printf("\n");
}
快速排序
最新推荐文章于 2024-07-17 10:35:12 发布