170402快速排序
来源:互联网 发布:耽美小说的软件 编辑:程序博客网 时间:2024/05/29 19:09
快速排序
时间限制: 10 Sec 内存限制: 128 MB
题目描述
第一行一个数字n, n<=100000。第二行n个数字。
请你将他们从小到大在一行内输出。
样例输入
5
1 2 4 2 1
样例输出
1 1 2 2 4
#include<bits/stdc++.h>using namespace std;int n;int a[100000];void Qsort(int a[],int low,int high){ if(low>=high){return;} int i=low,j=high; srand((int)time(0)); int key=a[i+rand()%(j-i+1)]; while(i<=j){ while(a[j]>key) --j; while(a[i]<key) ++i; if(i<=j) swap(a[i++],a[j--]); } Qsort(a,low,j); Qsort(a,i,high); }int main(){ cin>>n; for(int i=0;i<n;i++)cin>>a[i]; Qsort(a,0,n-1); cout<<a[0]; for(int i=1;i<n;i++)cout<<" "<<a[i]; return 0;}
快排?
快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R.
Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
——百度百科
- 设置两个变量i和j,排序开始前将i和j分别初始化为1和n,这里i和j分 别相当于序列的左指针和右指针;
- 以序列中第一个数作为基准(Base),赋值给s,这里基准相当于序 列分割的一个参照物;
- 从j开始从后向前搜索,每向前搜索一步,就将j的值减去1,直到搜索 到第一个小于s的数为止,将这个数和基准互换位置;
- 从i开始从前向后搜索,每向后搜索一步,就将i的值加上1,直到搜索 到第一个大于s的数为止,将这个数和基准互换位置;
- 重复第3、4步,直到i与j相等为止。
——mooc程序设计基础
0 0
- 170402快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- RegExp
- 【ZT】从安装到做项目一步步教你ROS学习入门
- 转载:Java CAS原理分析
- Java事务之二——失败的案例
- keil4如何将数组清空
- 170402快速排序
- cogs 693. Antiprime数
- 蓝桥杯 操作格子(单点更新)
- 题解——Leetcode 11.Container With Most Water 难度:Medium
- ssh框架搭建小结2
- Android 相机篇(五)--自定义相机
- lcs 模板
- 蓝桥杯搭积木
- Java事务之三——丑陋的案例