zoukankan      html  css  js  c++  java
  • 洛谷 1177——【模拟】快速排序(排序)

    题目描述

    利用快速排序算法将读入的N个数从小到大排序后输出。

    快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)

    输入输出格式

    输入格式:
    输入文件sort.in的第1行为一个正整数N,第2行包含N个空格隔开的正整数a[i],为你需要进行排序的数,数据保证了A[i]不超过1000000000。

    输出格式:
    输出文件sort.out将给定的N个数从小到大输出,数之间空格隔开,行末换行且无空格。

    输入输出样例

    输入样例#1:
    5
    4 2 4 5 1
    输出样例#1:
    1 2 4 4 5
    说明

    对于20%的数据,有N≤1000;

    对于100%的数据,有N≤100000。


    时间复杂度:O(nlogn)


    代码如下:

    const
      maxn=100000;
    var
      a:array[1..maxn] of longint;
      i,n:longint;
    
    procedure qsort(l,r:longint);
    var
      i,j:longint;
      temp,key:qword;
    begin
      if l>=r then exit;
      i:=l;j:=r;
      key:=a[l+random(r-l+1)];
      repeat
        while (a[i]<key) do inc(i);
        while (a[j]>key) do dec(j);
        if i<=j then
          begin
            temp:=a[i];a[i]:=a[j];a[j]:=temp;
            inc(i);dec(j);
          end;
      until i>j;
      qsort(l,j);
      qsort(i,r);
    end;
    
    begin
      read(n);
      for i:=1 to n do read(a[i]);
      randomize;
      qsort(1,n);
      for i:=1 to n do write(a[i],' ');
    end.
  • 相关阅读:
    华为软件开发云评测
    个人技术博客(α)
    结对第二次作业
    结对第一次作业----部门通
    数独设计
    2017软件工程实践第一次作业
    Alpha冲刺博客集
    个人作业——软件工程实践总结作业
    用户使用调查报告
    总结随笔(Beta)
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412403.html
Copyright © 2011-2022 走看看