IKUN 排序精讲
创始人
2024-05-22 01:09:29
0

一 冒泡排序  稳定

[算法描述]
所给的N个数中,先拿第一个数来和第二个比较,然后让较大的一个排在后面(即如果N1>N2,则让N1与N2交换位置),然后又拿第二个数来和第三个数比较,又把较大的一个排在后面,如此往下做下去,直到第N-1个数和第N个数比较完后,最大的那个数就会被升到了最后面来.接下来又照同样的方法来把前N-1个数中最大的数排到第N-1的位置上,做到最后,整一列数都被排好了. 不过下面的代码和上面描述的相反,是从后面开始比较的.

[源程序]
方案一:
for i:=1 to (n-1) do
  for j:=n downto (i+1) do
    if a[j-1]>a[j] then  //降序:a[j-1]     begin
      k:=a[j-1];
      a[j-1]:=a[j];
      a[j]:=k;
    end;
方案二:
for i:=1 to (n-1) do
  for j:=(i+1) to n do
    if a[i]>a[j] then  //降序:a[i]     begin
      k:=a[i];
      a[i]:=a[j];
      a[j]:=k;
    end;

二 选择排序  不稳定

[算法描述]
第一趟扫描所有数据,选择其中最小的一个与第一个数据互换;第二趟从第二个数据开始向后扫描,选择最小的与第二个数据互换;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程.

[源程序]
for i:=1 to (n-1) do
begin
  k:=i;
  for j:=(i+1) to n do
    if a[j]a[k]
  x:=a[i];
  a[i]:=a[k];
  a[k]:=x;
end;

三 插入排序  稳定

思路:当前a[1]..a[i-1]已排好序了,现要插入a[i]使a[1]..a[i]有序。
  procedure insert_sort;
  var i,j:integer;
  begin
    for i:=2 to n do begin
      a[0]:=a[i];
      j:=i-1;
      while a[0]         a[j+1]:=a[j];
j:=j-1;
      end;
      a[j+1]:=a[0];
    end;
  end;


四 快速排序  不稳定

[算法描述]
设有一无序数组a有n个元素.
1.以数组a的中点元素为参考值;
2.将中点左边大于(或小于)参考值的与中点右边小于(或大于)参考值的元素互换位置;
3.对中点左边的元素执行快排操作;
4.对中点右边的元素执行快排操作.

[源程序]
procedure qsort(var a:arraytype; lx,rx:longint);
var i,j,t,x:longint;
begin
      i:=lx; j:=rx;
      x:=a[random(j-i+1)+i];
      repeat
            while (a[i]x
            while (a[j]>x) do dec(j); //降序:x>a[j]
            if (i<=j) then
            begin
                  t:=a[i]; a[i]:=a[j]; a[j]:=t; //如果是为记录数组排序的话,t必须是记录类型的
                  inc(i);  dec(j);
            end;
      until (i>j);
      if (lx       if (i end;

五 堆排序  不稳定
procedure heap(var r:arrtype;nn,ii:integer);   {该过程为调整为大根堆的过程,大根堆排序后是 min to max }
  var x,i,j:integer;
  begin
    i:=ii;
    x:=r[ii];
    j:=2*ii;
    while j<=nn do
      begin
        if (jr[j+1])}
        if xr[j]}
          else j:=nn+1;
      end;
      r[i]:=x;
     a:=r;
  end;

procedure heapsort(n:integer);   {堆排序}
  for i:=n div 2 downto 1 do     {建立初始堆,且产生最大值a[1]}
    heap(a,n,i);
  for i:=n downto 2 do           {将当前最值交换到最终位置上,再对前i-1个数调整}
    begin
      temp:=a[1]; a[1]:=a[i]; a[i]:=temp;
      heap(a,i-1,1);
    end;                         


六 归并排序  稳定
{a为序列表,tmp为辅助数组}
procedure merge(var a:listtype; p,q,r:integer);
{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}
  var I,j,t:integer;
     tmp:listtype;
  begin
    t:=p;i:=p;j:=q+1;{t为tmp指针,I,j分别为左右子序列的指针}
    while (t<=r) do begin
      if (i<=q){左序列有剩余} and ((j>r) or (a[i]<=a[j])) {满足取左边序列当前元素的要求}
        then begin
              tmp[t]:=a[i]; inc(i);
        end
      else begin
            tmp[t]:=a[j];inc(j);
      end;
    inc(t);
  end;
  for i:=p to r do a[i]:=tmp[i];
end;{merge}

procedure merge_sort(var a:listtype; p,r: integer); {合并排序a[p..r]}
  var  q:integer;
  begin
    if p<>r then begin
      q:=(p+r-1) div 2;
      merge_sort (a,p,q);
      merge_sort (a,q+1,r);
      merge (a,p,q,r);
    end;
  end;
{main}
begin
  merge_sort(a,1,n);
end.
 

相关内容

热门资讯

品鉴会主持词 品鉴会主持词  借鉴诗词和散文诗是主持词的一种写作手法。随着中国在不断地进步,各种集会的节目都通过主...
新年半台词 新年三句半台词  三句半是一种中国民间群众传统曲艺表演形式。每段内容有三长句一半句。一般由4人演出,...
消夏文艺晚会的主持词 消夏文艺晚会的主持词(精选11篇)  主持词是主持人在节目进行过程中用于串联节目的串联词。在各种集会...
英雄联盟经典台词 英雄联盟经典台词  英雄联盟经典台词  1、正义,要么靠法律,要么靠武力!  2、你迷失在黑暗之中,...
小学元旦节的主持词 小学元旦节的主持词(精选16篇)  主持词是主持人在台上表演的灵魂之所在。在当今不断发展的世界,各种...
婚纱走秀主持词 婚纱走秀主持词三篇  篇一:婚纱走秀演出主持词  当您披上洁白的婚纱,点亮您一生中最美丽的日子,您是...
医者仁心台词 医者仁心台词大全  1. 钟立行对丁祖望:我们都在努力做一个能够被人怀念的人。  2.罗雪樱旁白:从...
《美丽人生》的经典台词 《美丽人生》的经典台词  意大利电影《美丽人生》,由罗伯托贝尼尼自编自演,讲述了意大利一对犹太父子被...
二年级主持词 二年级主持词  主持词分为会议主持词、晚会主持词、活动主持词、婚庆主持词等。在一步步向前发展的社会中...
年会的主持词 年会的主持词范文(通用5篇)  根据活动对象的不同,需要设置不同的主持词。时代不断在进步,主持词是活...
姨妈的后现代生活经典台词分享 姨妈的后现代生活经典台词分享  吉日良辰当欢笑,为什么鲛珠化泪抛?此时却又明白了,世上何尝尽富豪。也...
学校语文教研活动主持词 学校语文教研活动主持词  借鉴诗词和散文诗是主持词的一种写作手法。在一步步向前发展的社会中,很多晚会...
六一庆祝大会主持词 六一庆祝大会主持词  六一就是我们的节日,六一就是一个欢乐的日子,下面小编整理的六一庆祝大会主持词,...
婚礼感谢词 婚礼感谢词(15篇)婚礼感谢词1各位来宾,各位亲友:  大家晚上好!  今日是我女儿XXX和女婿XX...
文艺汇演主持词开场白 文艺汇演主持词开场白9篇  根据活动对象的不同,需要设置不同的主持词。我们眼下的社会,活动集会越来越...
总结大会主持词   导语:春去秋回又一栽,似水流年旺年来。  2017年公司年会主持词  一.主持人开场白  男:一...
农村结婚典礼主持词 农村结婚典礼主持词  一对新人立堂前,两心相印似蜜甜,三生有幸结良缘,下面是小编分享的 农村结婚典礼...
春节联欢晚会主持词开场白   翻开精美的日历,我细数着春节将要来临。那是我们中华民族的传统节日,更是我期盼的佳节,因为只有这几...
真爱至上中英文经典台词 真爱至上中英文经典台词  1、All I want for Christmas is you.  今...
欢聚一堂舞蹈主持词 欢聚一堂舞蹈主持词  串词是在晚会、联欢会等大型联欢活动中,主持人把前后节目,把整台节目恰到好处的联...