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.
 

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...