发布网友 发布时间:2022-04-21 19:29
共1个回答
热心网友 时间:2023-09-13 19:31
如果说速度最快,应该是“基数排序法”(radix sort)。不过这种排序算法使用范围有限。 基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。 解法 基数排序的方式可以采用LSD(Least sgnificant digital)或MSD(Most sgnificant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。 var a:array[0..100]of longint; min,max,n,i,tmp:longint; begin fillchar(a,sizeof(a),0); min:=maxlongint; max:=-min;//max和min是数字的最大和最小边界。 readln(n); for i:=1 to n do begin read(tmp); inc(a[tmp]);//tmp的出现次数+1 if tmp>max then max:=tmp; if tmp<min then min:=tmp; end; for i:=min to max do while a<>0 do begin//如果i这个数字还没有打印完,就继续打印 dec(a);//把i打印并且次数-1. write(i,' '); end; writeln; end.