码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序算法

时间:2020-01-04 18:39:39      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:event   排序算法   快速   close   main   eve   ide   turn   问题   

分治法

分治策略:

<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("\n");
 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("排序前:\n");
35     disp(a,n);
36     QuickSort(a,0,n-1);
37     printf("排序后:\n");
38     disp(a,n);
39     return 0; 
40 } 
View Code

快速排序算法

标签:event   排序算法   快速   close   main   eve   ide   turn   问题   

原文地址:https://www.cnblogs.com/Hqx-curiosity/p/12149848.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!