为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。

希尔排序

来自NOCOW
跳转到: 导航, 搜索

[编辑] 基本思想

先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

[编辑] 程序

program shell;
const n=7;
var a:array[1..n]of longint;
    i,j,d,x:longint;
begin
  write('Enter data:');
  for i:=1 to n do read(a[i]);
  d:=n div 2;
  while d>=1 do
  begin
    for i:=d+1 to n do
    begin
      x:=a[i];
      j:=i-d;
      while (j>0)and(x<a[j]) do
      begin
        a[j+d]:=a[j];
        j:=j-d;
      end;
      a[j+d]:=x;
    end;
    d:=d div 2;
  end;
  write('output data:');
  for i:=1 to n do write(a[i],' ');
  writeln;
end.
希尔排序是一个小作品,欢迎帮助扩充这个条目。
个人工具