1777: 算法10-6~10-8:快速排序

原创 2015年07月10日 09:46:11

题目描述

快速排序是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序的记录分割成两个独立的部分,其中一部分记录的关键字均比另一部分的关键字小,在分成两个部分之后则可以分别对这两个部分继续进行排序,从而使整个序列有序。
快速排序的算法可以描述如下:
在本题中,读入一串整数,将其使用以上描述的快速排序的方法从小到大排序,并输出。

输入

输入的第一行包含1个正整数n,表示共有n个整数需要参与排序。其中n不超过100000。
第二行包含n个用空格隔开的正整数,表示n个需要排序的整数。

输出

只有1行,包含n个整数,表示从小到大排序完毕的所有整数。
请在每个整数后输出一个空格,并请注意行尾输出换行。

样例输入

10 2 8 4 6 1 10 7 3 5 9

样例输出

1 2 3 4 5 6 7 8 9 10

提示

在本题中,需要按照题目描述中的算法完成快速排序的算法。

快速排序是一种十分常用的排序算法,其平均时间复杂度为O(knlnn),其中n为待排序序列中记录的个数,k为常数。大量的实际应用证明,在所有同数量级的此类排序算法中,快速排序的常数因子k是最小的,因此,就平均时间而言,快速排序是目前被认为最好的一种内部排序方法。

而在C语言的常用编译器中,qsort函数是一个非常常用的快速排序函数。

program qsort;

 var n,l:longint;a:array[1..100000]of longint;

 procedure qsort(left,right:longint);

 var

  i,j,x,y:longint;

 begin

  i:=left;j:=right;x:=a[(left+right) div 2];

  repeat

   while a[i]<x do inc(i);

   while x<a[j] do dec(j);

   if i<=j then

   begin

    y:=a[i];a[i]:=a[j];a[j]:=y;

    inc(i);dec(j);

   end;

  until i>j;

  if left<j then qsort(left,j);

  if i<right then qsort(i,right);

 end;

begin

 readln(n);

 for l:=1 to n do read(a[l]);

 qsort(1,n);

 for l:=1 to n do write(a[l],' ');

 writeln;

end.

版权声明:本文为博主原创文章,未经博主允许不得转载。

直接插入排序

题目描述 直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的且记录数增加了1的有序表。 其算法可以描述如下: 在本题中,读入一串整数...
  • qq_32126633
  • qq_32126633
  • 2016年09月25日 23:03
  • 386

数据结构--快速排序

快速排序是对起泡排序的一种改进。 它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分的记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序...
  • coderNim
  • coderNim
  • 2016年12月20日 10:13
  • 307

快速排序的基本实现(完整源代码)

以下是快速排序的完整源代码。 基本原理是: 先将待排序列一分为二,通过逐个比较,将某一元素设置为枢轴pivot,然后将比pivot小的数据换到左边,比pivot大的...
  • fengyanglian
  • fengyanglian
  • 2015年11月09日 15:26
  • 2061

快速排序的实现---数据结构学习(六)

快速排序(QuickSort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以...
  • weitxing
  • weitxing
  • 2015年08月20日 10:14
  • 405

算法【8】:快速排序

http://blog.csdn.net/hguisu/article/details/7776068 快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的。但若初始序列...
  • jijunyuan_11109
  • jijunyuan_11109
  • 2015年12月16日 13:48
  • 384

快速排序

题目描述 利用快速排序算法将读入的N个数从小到大排序后输出。 快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用S...
  • SSL_Yyx
  • SSL_Yyx
  • 2017年01月29日 21:53
  • 210

快速排序

问题 C: 算法10-6~10-8:快速排序 时间限制: 1 Sec 内存限制: 32 MB 提交: 668 解决: 255 提交状态 题目描述 快速排序是对起泡...
  • burning1996
  • burning1996
  • 2016年11月05日 19:18
  • 213

快速排序平均情况下时间复杂度计算过程:

就平均情况而言,快速排序是
  • twfx1027
  • twfx1027
  • 2014年11月21日 21:09
  • 2449

七大排序算法性能的分析

这里我来集中分析一下七大排序算法的性能问题。如果不当之处,敬请指正。冒泡排序(Bubble) 排序算法 平均情况下 最好情况 最坏情况 稳定性 空间复杂度 冒泡 O(n2...
  • qq_16811963
  • qq_16811963
  • 2016年06月17日 16:05
  • 3577

算法分析与设计实验 分治策略 两路合并排序和快速排序

实验目的 理解分治法的算法思想,阅读实现书上已有的部分程序代码并完善程序, 加深对分治法 的算法原理及实现过程的理解。 实验内容 用分治法实现一组无序序列的两路合并排序和快速排序。要求清楚合并...
  • wyh7280
  • wyh7280
  • 2015年05月07日 18:58
  • 1232
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1777: 算法10-6~10-8:快速排序
举报原因:
原因补充:

(最多只允许输入30个字)