1 //参数说明:
 2 //      int data[] : 待排序的数据数组
 3 //      int m      : 下限值
 4 //      int n      : 上限值
 5 void QuickSort ( int data[] , int m , int n)
 6 {
 7     int i , j , x;
 8 
 9     i = m;
10     j = n;
11     x = data[i];      //取数组的第一个数作为基准值
12 
13     while ( i < j )
14     {
15         while( ( i < j ) && ( x < data[j] ) )
16         {
17             j--;
18         }
19         if ( i < j ) 
20         {
21             data[i] = data[j];
22             i++;       
23         }
24         else
25             break;
26 
27        while( ( i < j ) && ( x > data[i] ) )
28         {
29             i++;
30         }
31         if ( i < j ) 
32         {
33             data[j] = data[i];
34             j--;
35         }
36         else
37             break;
38     }  
39     
40     data[i] = x;       //循环结束后,基准值的位置已经确定
41     //对基准值两边的子数列进行递归操作,最终完成排序
42     QuickSort ( data , m , i - 1 );
43     QuickSort ( data , i + 1 , n);  
44 }    

快速排序算法采用分治法的策略,首先在数列中随便选出一个数作为基准,将所有比基准小的数放在基准的前面,所有比基准大的数放在基准的后面,一趟走完之后,基准的位置已经完全确认了,数据被分成了两部分,在将这两部分递归进行上面的操作,即完成了快速排序的实现。

 

posted on 2018-03-14 15:42  菠萝有点甜  阅读(151)  评论(0编辑  收藏  举报