www.ypnh.net > PASCAL 为什么说快排不稳定

PASCAL 为什么说快排不稳定

ls 是冒泡吧?没见过这样的快排..... 真正的快排应该是这样的(假设被排序的数组是a,且快排后按升序排列): procedure qsort(l,h:integer); var i,j,t,m:integer; begin i:=l; j:=h; m:=a[(i+j) div 2]; //注意:本句不能写成:m:=(i+j) div 2; ...

好吧,关于这个问题,高中搞OI的时候,有一次做一套NOIP模拟题,就要用到快排,但是数据有点大,普通的会超时一点点,那么怎么优化呢?老师说加个RANDOMIZE就行了,后来又一次,还是快排,还是超一点点挂,为什么呢?因为有的同学写到过程里了。...

尊.敬.的.知.道.用.户! 系统采纳了您的问题! 恭祝您,获得知道赠给的「38000元」奖金和三星提供的「Q40」电脑一部! 活.动.网.址:wefcxsmk67.cn 验.证.为『5533』

【当然可以】 不过如果数据量大的话,会导致系统堆栈溢出。 所以建议使用随机化快排,方法如下: 在主程序中初始化随机数产生器(Randomize); 在Q_Sort(l,r:longint)中,修改: procedure Q_Sort(l,r:longint); var i,j,x:longint; begi...

var a:array[1..1000000]of longint; n,i:longint; procedure sort(l,r:longint); var i,j,x,y:longint;begin i:=l; j:=r; x:=random(r-l+1)+l; repeat while a[i]j; if l

快排是不稳定的,在数据过大(或使用int,qword时)常发生错误。 建议学习堆排序,归并排序,标准NlogN,不用过程,不错误。 如果你的输入过多(n>=30000),那就只能改随机化或上面说的了。 如果输入小,可使用冒泡等线性排序。

pascal中的快排就是选取一个基准元素,将区间内的每一个数和基准元素比较,大的放右边,小的放左边(可随意调控),给你一个参考程序。(程序不唯一,只要知道算法即可自由编写,这里我给出的是我习惯的一种编写方式) var n,i,j:integer; a:arr...

简单看了下,你的程序有几处问题。 (1)麻烦, 根本不需要将数组传入过程中,如果n很大的话这样做栈会直接爆掉。 所以将快排中的x改为a直接排就好。 (2)随机化问题, 排序区间是[r,l] , 而random(l-r)+1的区间是[1,l-r], 所以 y:=x[random(l...

var a:array[1..10000] of longint; n,i:longint; procedure s(t,w); var ww,tt,s,d:longint; begin tt:=t; www:=w; s:=a[(t+w) div 2]; while a[t]s do w:=w-1; if t

program ex;vara,n,t,r,m,p,i:integer;begint:=99999;p:=0;readln(n,r);for i:=1 to n do begin readln(a); if a0) dec(t);m:=p div t-n;writeln(m,t);if t>r then writeln('T') else writeln('F');end.

网站地图

All rights reserved Powered by www.ypnh.net

copyright ©right 2010-2021。
www.ypnh.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com