快排

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 void Qsort ( int a[] , int low , int high )
 4 {
 5     if( low >= high )
 6         return ;
 7     int first = low ;
 8     int last = high ;
 9     int key = a[first] ;
10     while ( first < last )
11     {
12         while ( first < last && a[last] >= key )
13             last--;
14         a[first] = a[last];
15         while ( first < last && a[first] <= key )
16             first++;
17         a[last] = a[first];
18     }
19 
20     a[first] = key ;
21     Qsort ( a , low , first - 1 );
22     Qsort ( a , first + 1 , high );
23 }
24 int main()
25 {
26     int i;
27     int a[] = {12,341,453,14,657,1341,767,784,3453,4312,4535,
28     564,312,564,3,45,96,4,32,54,13,21,13541};
29     Qsort ( a , 0 , sizeof(a)/sizeof(a[0]) - 1 );
30     for( i = 0 ; i < sizeof(a)/sizeof(a[0]) ; i++ )
31     {
32         printf("%d ", a[i] );
33     }
34     printf("
");
35     return 0;
36 }
C

http://baike.baidu.com/link?url=1n_Hw5RAPsGdCclDZ-ToREy57uT3uhiwpuuvod86Ut8GF6uzSuqFPxOZBYROWb-7Z-S46QFP_pAx_m4HUNcWAK#3_2

百度上的版本是以a[1]为“标杆”,下面这个版本是学长提供的以一个随机数a[rand]作为“标杆”。

还有Qsort 是会退化成n^2 , 运气很差时:比如说从小到大排时 , 每快 标杆 都取到了每块的最大值。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 #include<iostream>
 5 using namespace std;
 6 void Qsort ( int* a , int l , int r )//a[l,r)
 7 {
 8     int len = r - l ;
 9     if( len <= 1 ) return ;
10     int pos = rand() %  (r - l);
11     swap( a[l+pos] , a[r-1] );
12     int cnt = 0 ;//计算 <= a[r-1] 的数共有j个
13     for(int i = l ; i < r ; i++)
14     {
15         if ( a[i] <= a[r-1] ) {
16             swap( a[l+cnt] , a[i] );
17             cnt++ ;
18         }
19     }
20     Qsort(a , l , l + cnt - 1);
21     Qsort(a , l + cnt , r );
22 }
23 int main()
24 {
25     srand(time(NULL));//根据运行时间随机生成一个数
26   //  printf("srand=%d
",rand());
27     int a[] = {10,45,85,78,96,32,20,45,20,10,32,1,5,6,25,10,96,74};
28 
29     Qsort ( a , 0 , sizeof(a)/sizeof(int) );
30     for ( int i = 0 ; i < sizeof(a)/sizeof(int) ; i++ )
31     {
32         printf( "%d " , a[i] );
33     }
34     printf("
");
35     return 0 ;
36 }
C++
原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4239891.html