快速排序

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

时间复杂度:O(N*logN);

代码:

 1 void quick_sort(int s[], int l, int r)
 2 
 3 {
 4 
 5     if (l < r)
 6 
 7     {
 8 
 9         int i = l, j = r, x = s[l];
10 
11         while (i < j)
12 
13         {
14 
15             while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
16 
17               j--; 
18 
19             if(i < j)
20 
21               s[i++] = s[j]; // 进行替换
22 
23           
24 
25             while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
26 
27               i++; 
28 
29             if(i < j)
30 
31               s[j--] = s[i];
32 
33         }
34 
35        s[i] = x;  // 剩余的位置即为x
36 
37         quick_sort(s, l, i - 1); // 递归调用
38 
39         quick_sort(s, i + 1, r);
40 
41     }
42 
43 }
View Code

 

posted @ 2019-12-12 22:47  PeacefulGemini  阅读(335)  评论(0)    收藏  举报
回顶部