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

 

你可能感兴趣的:(总结)