希尔排序(Shell Sort)
2009-10-05 20:42
204 查看
希尔排序(Shell Sort)又叫做缩小增量排序(diminishing increment sort),是一种很优秀的排序法,算法本身不难理解,也很容易实现,而且它的速度很快。
基本思想:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
该方法实质上是一种分组插入方法。
插入排序(Insertion Sort)的一个重要的特点是,如果原始数据的大部分元素已经排序,那么插入排序的速度很快(因为需要移动的元素很少)。从这个事实我们可以想到,如果原始数据只有很少元素,那么排序的速度也很快。--希尔排序就是基于这两点对插入排序作出了改进。
例如,有100个整数需要排序。
第一趟排序先把它分成50组,每组2个整数,分别排序。
第二趟排序再把经过第一趟排序后的100个整数分成25组,每组4个整数,分别排序。
第三趟排序再把前一次排序后的数分成12组,第组8个整数,分别排序。
照这样子分下去,最后一趟分成100组,每组一个整数,这就相当于一次插入排序。
由于开始时每组只有很少整数,所以排序很快。之后每组含有的整数越来越多,但是由于这些数也越来越有序,所以排序速度也很快。
程序(自己写的):形参为数组地址 和 排序个数
void ShellPass(int a[],int n)
{
int i,j,gap;
int temp;
gap=n/2;
while(gap>0)
{
for(i=gap;i<n;i++)
{
j=i-gap;
if(a[j]>a[j+gap])
{
temp=a[j]; a[j]=a[j+gap]; a[j+gap]=temp;
}
}
gap=gap/2;
}
}
基本思想:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
该方法实质上是一种分组插入方法。
插入排序(Insertion Sort)的一个重要的特点是,如果原始数据的大部分元素已经排序,那么插入排序的速度很快(因为需要移动的元素很少)。从这个事实我们可以想到,如果原始数据只有很少元素,那么排序的速度也很快。--希尔排序就是基于这两点对插入排序作出了改进。
例如,有100个整数需要排序。
第一趟排序先把它分成50组,每组2个整数,分别排序。
第二趟排序再把经过第一趟排序后的100个整数分成25组,每组4个整数,分别排序。
第三趟排序再把前一次排序后的数分成12组,第组8个整数,分别排序。
照这样子分下去,最后一趟分成100组,每组一个整数,这就相当于一次插入排序。
由于开始时每组只有很少整数,所以排序很快。之后每组含有的整数越来越多,但是由于这些数也越来越有序,所以排序速度也很快。
程序(自己写的):形参为数组地址 和 排序个数
void ShellPass(int a[],int n)
{
int i,j,gap;
int temp;
gap=n/2;
while(gap>0)
{
for(i=gap;i<n;i++)
{
j=i-gap;
if(a[j]>a[j+gap])
{
temp=a[j]; a[j]=a[j+gap]; a[j+gap]=temp;
}
}
gap=gap/2;
}
}
相关文章推荐
- 数据算法之希尔排序(shellSort)的Java实现
- 排序_Shell_Sort(希尔排序)
- 希尔排序(Shell Sort)
- 排序 —— 希尔排序(Shell sort)
- 希尔排序(shellsort)又叫增量递减排序(diminishing increment)
- 排序之希尔排序(Shell Sort)
- 希尔排序(shell sort):c++
- 算法总结JS版(四)—— 希尔排序(Shell Sort)
- uva 10152 ShellSort 龟壳排序(希尔排序?)
- 希尔排序(shellsort)
- Java基础知识强化57:经典排序之希尔排序(ShellSort)
- 希尔排序(shellsort)算法实现
- 希尔排序(shell sort)
- 用python实现希尔排序(shell_sort)
- 希尔排序 shell sort
- 【内部排序】三:希尔排序(Shell Sort)的多种实现(不断优化+源码)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shellsort)
- 排序算法——希尔排序(Shell Sort)