闲话不多,先看百度百科是怎么解释的:
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
基本思想是:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 =1(
<
…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
稳定性:
由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
伪代码:
void ShellPass(SeqList R,int d)
public static void ShellSort(int a[]){ int d1 = a.length/2; while(true){ // 直到 d1 ==1 的时候跳出循环 for(int i =0;i<d1;i++){ for(int j =i;j+d1<a.length;j+=d1){ int temp; if(a[j]>a[j+d1]){ temp = a[j+d1]; a[j+d1] = a[j]; a[j] = temp; } } } if(d1 ==1){ break; } d1--; } }
原文:http://www.cnblogs.com/gzd-123/p/5313043.html