快速排序算法

Posted hqx-curiosity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法相关的知识,希望对你有一定的参考价值。

分治法

分治策略:

<1>分解:将原序列 a[s...t] 分解成两个子序列 a[s...i-1] 和 a[i+1...t]。其中 i = (s+t)/2;

<2>求解子问题:若子序列的长度是0或1,则是有序的,直接返回;否则递归地求解各个子问题。

<3>合并:由于整个子序列存放在数组 a 中,排序过程是就地进行的,合并步骤不需要执行任何操作。

技术图片
 1 //快速排序 -- 分治法
 2 #include<stdio.h>
 3 void disp(int a[],int n){
 4     int i;
 5     for(i=0;i<n;i++)
 6         printf("%d ",a[i]);
 7     printf("
");
 8 } 
 9 int Partition(int a[],int s,int t){
10     int i = s,j = t;
11     int tmp = a[s];    //选取第一个记录作为基准 
12     while(i != j){
13         while(j > i && a[j] >= tmp)
14             j--;
15         a[i] = a[j];
16         while(i < j && a[i] <= tmp)
17             i++;
18         a[j] = a[i];
19     }
20     a[i] = tmp;
21     return i;
22 }
23 void QuickSort(int a[],int s,int t){
24     int i;
25     if(s<t){
26         i = Partition(a,s,t);
27         QuickSort(a,s,i-1);
28         QuickSort(a,i+1,t);
29     }
30 }
31 int main(){
32     int n = 10;
33     int a[] = {2,5,1,7,10,6,9,4,3,8};
34     printf("排序前:
");
35     disp(a,n);
36     QuickSort(a,0,n-1);
37     printf("排序后:
");
38     disp(a,n);
39     return 0; 
40 } 
View Code

以上是关于快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章

一行Python代码搞定快速排序算法

排序算法 | 快速排序(含C++/Python代码实现)

交换排序(冒泡排序快速排序的算法思想及代码实现)

快速排序/快速选择算法

快速排序算法详解及代码实现

排序算法——快速排序的图解代码实现以及时间复杂度分析