7.24 快排总结

来源:互联网 发布:数据库验收要求 编辑:程序博客网 时间:2024/06/04 19:21

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   与结构体联系比较大。

 

0 0
原创粉丝点击