快速排序模板

 

1.使用scanf函数提高运行效率

2.使用双指针双向读入,运行效率更高

3.定义一个量x,使得数组左右两边分别小于等于和大于等于x,进行快速排序;

4.用do,while循环最后一轮是已经不满足循环条件,此时a[i] >= x, a[j] <= x,

所以循环停止,此时只能使得中间的数 a[i] = a[j] = x, 注意在取x的时候,取了l,

后面快排时不能用 i 作区间,因为此时会形成死循环,其他同理,所以此时最好

选择定义中间量x来避免,且定义 i,j 指针时 要在区间的前后位置,因为指针

这里移动是先往后移动一格再按条件交换,所以在循环前后,移动一格,才能

读取到边界的值。

 

 

 

复制代码
 1 #include<iostream>
 2 using namespace std;
 3 
 4 const int N = 1e7 + 10;
 5 int n;
 6 int a[N];
 7 
 8 void quick_sort(int a[],int l,int r)
 9 {
10 if(l >= r) return ;
11 int x = a[(l + r ) / 2],i = l - 1,j = r + 1;
12 while(i < j)
13 {
14 do i ++;while(a[i] < x);
15 do j --;while(a[j] > x);
16 if(i < j) swap(a[i],a[j]);
17 
18 }
19 quick_sort(a,l,j);
20 quick_sort(a,j + 1,r);
21 }
22 int main()
23 {
24 scanf("%d", &n);
25 for(int i = 0;i < n; i++) scanf("%d", &a[i]);
26 
27 quick_sort(a, 0, n - 1);
28 
29 for(int i = 0;i < n; i ++) printf("%d ", a[i]);
30 
31 return 0;
32 }
复制代码

 

posted @   rw156  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示