dd版本:
实战中,未被超越。
1 void quick_sort(int *a,int f,int t) 2 { 3 int i,j,k; 4 i=f; 5 j=t; 6 k=a[f]; 7 8 if(i>=j) return; 9 10 while(i<j) 11 { 12 while(i<j && a[j]>=k) 13 j--; 14 if(i<j) 15 a[i++]=a[j]; 16 17 while(i<j && a[i]<=k) 18 i++; 19 if(i<j) 20 a[j--]=a[i]; 21 } 22 23 a[i]=k; 24 25 quick_sort(a,f,i-1); 26 quick_sort(a,i+1,t); 27 return; 28 }
消除一个递归的快排:
1 #include<stdio.h> 2 #define N 250000 3 4 void quick_sort(int *a,int f,int t) 5 { 6 int i,j,k; 7 8 while(f < t) { 9 i=f; 10 j=t; 11 k=a[f]; 12 13 while(i<j) 14 { 15 while(i<j && a[j]>=k) 16 j--; 17 if(i<j) 18 a[i++]=a[j]; 19 20 while(i<j && a[i]<=k) 21 i++; 22 if(i<j) 23 a[j--]=a[i]; 24 } 25 26 a[i]=k; 27 28 quick_sort(a,f,i-1); 29 30 f = i + 1; 31 } 32 return; 33 } 34
《算法C语言实现》
冒泡 + 快排
1 #include <stdio.h> 2 #include <string.h> 3 4 #define swap(A, B) {int tmp=A;A=B;B=tmp;} 5 6 int A[1012]; 7 8 9 void bubble(int A[],int l, int r){ 10 int i,j; 11 for(i=l;i<r;++i) 12 for(j=r;j>l;j--){ 13 if(A[j-1]<A[j]) 14 swap(A[j-1], A[j]); 15 } 16 } 17 18 int partition(int a[], int l, int r){ 19 int i = l-1,j=r; 20 for(;;){ 21 while(a[++i]>a[r]); 22 while(a[r]>a[--j]) 23 if(j==l) break; 24 if(i>=j) break; 25 swap(a[i],a[j]); 26 } 27 swap(a[i],a[r]); 28 return i; 29 } 30 31 void quicksort(int a[], int l, int r){ 32 int i; 33 if(r<=l) return; 34 i = partition(a, l, r); 35 quicksort(a, l, i-1); 36 quicksort(a, i+1, r); 37 }
速度有待提高
快排的库函数
qsort 与结构体联系比较大。