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; ...

这个快排吧是这样的 我用我的程序给你讲啊 proceduer kp(l,r:integer); var c,d,e,f:integer; begin c:=l;d:=r;e:=a[(l+r) div 2]; repeat while a[c]e do dec(d); if cd; if c

var a:array[1..100000]of longint; n,i:longint; procedure qsort(l,r: longint); var i,j,x,y: longint; begin i:=l; j:=r; x:=a[(l+r) div 2]; repeat while a[i]j; if l

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

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

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

插入排序 var n,i,j:longint; a:array[0..10000]of longint; begin readln(n); for i:=1 to n do read(a[i]); for i:=2 to n do begin a[0]:=a[i];j:=i-1; while (a[0]0) do begin a[j+1]:=a[j]; j:=j-1; end; a[j+1]:=a[0]; end; for i:=1 to n...

var a:array[1..100] of integer; n,i:integer; procedure qsort(head,last:integer); var i,j,x:integer; begin if head>=last then exit; x:=a[head]; i:=head;j:=last; while i

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

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

网站地图

All rights reserved Powered by www.ypnh.net

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