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年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
——百度百科

  1. 设置两个变量i和j,排序开始前将i和j分别初始化为1和n,这里i和j分 别相当于序列的左指针和右指针;
  2. 以序列中第一个数作为基准(Base),赋值给s,这里基准相当于序 列分割的一个参照物;
  3. 从j开始从后向前搜索,每向前搜索一步,就将j的值减去1,直到搜索 到第一个小于s的数为止,将这个数和基准互换位置;
  4. 从i开始从前向后搜索,每向后搜索一步,就将i的值加上1,直到搜索 到第一个大于s的数为止,将这个数和基准互换位置;
  5. 重复第3、4步,直到i与j相等为止。

——mooc程序设计基础

0 0
原创粉丝点击