7.24 快排总结

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

 

posted @ 2013-07-24 17:21  Levi.duan  阅读(241)  评论(0编辑  收藏  举报