一、思想
1、 根据di不断将正规序列分割成若干个子序列,对每个子序列进行直接插入排序
其中di表示第i次排序的分组因子:d1=n/2,d2=d1/2,d3=d2/2...
2、 实质:
根据di分组,总是将序列分成不同的子序列,线段表示每个子序列的范围
找每条线段首尾两个元素中最小的,然后次小的,依次排序

二、代码
Void ShellSort(int[] a){
int n=a.length;
int d=n/2;
while(d>=1){
for(int i=d;i<n;i++){
int temp=a[i];//线段尾部元素放在临时变量中,等长线段不断移动,当尾部元素小于首部元素时,交换
for(int j=i-d;j>=0&&temp<a[j];j=j-d){
a[j+d]=a[j];
a[j+d]=temp;
}
}
}
}
各种排序思想总结见:

本文详细介绍了Shell排序方法,通过逐步缩小子序列间隔,将序列分割并使用直接插入排序。核心步骤包括将序列按分组因子di分割,比较并交换相邻元素。理解这个过程有助于提升对排序算法的理解。
4044

被折叠的 条评论
为什么被折叠?



