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.
 

相关内容

热门资讯

小学六年级语文上册句子练习(... 小学六年级语文上册句子练习 篇一我最喜欢的动物我最喜欢的动物是猫。猫有着柔软的皮毛和敏捷的身手,总是...
宽容六年级作文(精简6篇) 宽容六年级作文 篇一:宽容的力量宽容是一种美德,它可以让人与人之间更加和谐,让世界变得更加美好。作为...
如何保护环境作文(实用3篇) 如何保护环境作文 篇一保护环境是我们每个人的责任。环境污染已经给我们的生活带来了很多问题,因此保护环...
我心目中的英雄六年级作文【通... 我心目中的英雄六年级作文 篇一我心目中的英雄英雄,对于每个人来说,可能有着不同的定义。但对我来说,我...
校园的一角六年级作文 校园的一角六年级作文  在日常学习、工作抑或是生活中,大家最不陌生的就是作文了吧,作文是通过文字来表...
成长的脚步六年级作文450字... 成长的脚步六年级作文450字 篇一:初入小学的喜悦我还记得六年级刚开始的那一天,那是我人生中最开心的...
学做家务六年级作文【精彩5篇... 学做家务六年级作文 篇一学做家务的重要性家务是每个人都要面对的事情,学会做家务是每个孩子成长的必经之...
多肉植物的作文六年级300字... 多肉植物的作文六年级300字 篇一多肉植物的种类和特点多肉植物是一类独特的植物,它们以其肥厚的叶片和...
感动小学六年级作文500字【... 篇一:一封感谢信亲爱的老师:您好!我是您的学生小明。我想用这封信表达我对您的感激之情。在我六年级的时...
我的六年级理想500字作文【... 我的六年级理想500字作文 篇一:成为一名科学家我是一名六年级的学生,对科学充满了浓厚的兴趣。在我的...
多彩的活动作文450字六年级... 多彩的活动作文450字六年级 篇一我校举办的多彩活动最近,我校举办了一系列多彩的活动,给我们带来了极...
笔尖流出的故事六年级作文30... 笔尖流出的故事六年级作文300字 篇一一天,我在写作业的时候,突然发现笔尖流出了一道红色的液体。我好...
那双冰冷的手六年级作文800... 那双冰冷的手六年级作文800字 篇一那双冰冷的手寒冷的冬天,我和妈妈一起去了奶奶家。奶奶住在一个小村...
六年级选择优秀作文5篇【优质... 六年级选择优秀作文5篇篇一:我的暑假计划暑假即将到来,我已经开始计划如何度过这个美好的假期了。首先,...
羞愧六年级作文【推荐3篇】 羞愧六年级作文 篇一:我的一次尴尬经历今天,我要告诉大家一个让我感到非常羞愧的经历。那是在上个星期,...
我的心愿六年级作文(精简6篇... 我的心愿六年级作文 篇一我的心愿每个人都有自己的心愿,而我作为一个六年级的学生,也有着自己的心愿。我...
学会宽容作文(推荐3篇) 学会宽容作文 篇一宽容是一种美德,它是人与人之间相处的一种智慧。在现代社会中,人们经常会面对各种各样...
一件高兴的事六年级作文【实用... 一件高兴的事六年级作文 篇一今天是一个特别高兴的日子,因为我终于完成了自己的绘画作品,而且还被老师选...
六年级上册语文第四单元作文(... 六年级上册语文第四单元作文 篇一篇一:我的梦想梦想是每个人心中的火花,它能给我们力量,让我们坚持不懈...
排队风波六年级作文(精彩3篇... 篇一:排队风波六年级作文排队是我们生活中常见的一种行为,它需要我们遵守一定的规则和秩序。然而,即使是...