分享

各类排序总结(DELPHI版) - 闲云野鹤 - 博客园

 arron9527 2011-04-30

备忘一下

 


TSortType = array of integer;

procedure Swap(var sorttemp : TSortType;left,right:integer);
var temp :integer;
begin
   temp :
= sorttemp[left];
   sorttemp[left]:
= sorttemp[right];
   sorttemp[right] :
= temp;
end;

function PartitionIt(var sorttemp : TSortType;left,right,pivot:integer):integer;
var leftptr,rightptr :integer;
begin
  leftptr :
= left -1;
  rightptr :
= right ;
  
while true do begin
    
while leftptr < length(sorttemp) do  begin
      leftptr :
= leftptr+1;
      
if sorttemp[leftptr] >= pivot then break;
    
end;
    
while true  do begin
      rightptr:
= rightptr-1;
      
if rightptr < 0 then break;
      
if sorttemp[rightptr] <= pivot then break;
    
end;
    
if (leftptr >= rightptr) then break;
    swap(sorttemp,leftptr,rightptr);
  
end;
    swap(sorttemp,leftptr,right);
    result:
= leftptr;
end;

procedure QuickSort(var sorttemp : TSortType;left,right:integer);    //快速排序
var pivot,partition:integer;
begin
  
if (left-right) > 0 then exit;
  pivot :
= sorttemp[right];
  partition :
= partitionit(sorttemp,left,right,pivot);
  quicksort(sorttemp,left,partition
-1);
  quicksort(sorttemp,partition
+1,right);
end;

function CopyArray(SortO : TSortType):TSortType;
var i,len:integer;
    Sorttemp : TSortType;
begin
  len :
= length(SortO);
  SetLength(Sorttemp,len);
  
for i:=0 to len-1 do begin
      Sorttemp[i] :
= SortO[i];
  
end;
  result :
= Sorttemp;
end;

procedure InsertionSort(var sorttemp :Tsorttype);  //插入排序
var i,outer,inner,temp,len:integer;
begin
   len :
= length(sorttemp);
   
for outer:=0 to len-1 do begin
     inner :
= outer;
     temp:
=sorttemp[outer];
     
while (inner>0and (sorttemp[inner-1]>=temp ) do begin
       sorttemp[inner]:
=sorttemp[inner-1];
       inner :
= inner-1;
     
end;
     sorttemp[inner] :
= temp;
   
end;
end;

procedure ShellSort(var sorttemp :Tsorttype);       //希尔排序
var i,h,inner,outer,temp,len:integer;
begin
   h:
=1;
   len :
= length(sorttemp);
   
while(h<=len/3)do begin
     h :
= h*3+1;
   
end;
   
while(h>0)do begin
     
for outer:=to len-1 do begin
       inner :
= outer;
       temp :
= sorttemp[outer];
       
while((inner>h-1)and (sorttemp[inner-h]>=temp))do begin
          sorttemp[inner]:
=sorttemp[inner-h];
          inner :
= inner-h;
       
end;
       sorttemp[inner]:
=temp;
     
end;
     h:
=(h-1div 3;
   
end;
end;

procedure BubbleSort(var Sorttemp: TSortType);       //冒泡排序
var temp,len,outer,inner:integer;
begin
  temp :
= 0;
  len :
= length(Sorttemp);
  
for outer:=len-1 downto 1 do begin
    
for inner := 0 to outer-1 do begin
      
if sorttemp[inner] > sorttemp[inner+1then begin
         temp :
= sorttemp[inner];
         sorttemp[inner] :
= sorttemp[inner+1];
         sorttemp[inner
+1] := temp;
      
end;
    
end;
  
end;
end;

procedure AdvanceBubbleSort(var Sorttemp: TSortType);    //改进冒泡排序
var temp,len,outer,inner:integer;
    flag :boolean;
begin
  temp :
= 0;
  len :
= length(Sorttemp);
  
for outer:=len-1 downto 1 do begin
    flag :
= false;
    
for inner := 0 to outer-1 do begin
      
if sorttemp[inner] > sorttemp[inner+1then begin
         temp :
= sorttemp[inner];
         sorttemp[inner] :
= sorttemp[inner+1];
         sorttemp[inner
+1] := temp;
         flag :
=true;
      
end;
    
end;
    
if not flag then break;
  
end;
end;

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多