《七大排序算法》(四)之希尔排序(Java实现)

来源:互联网 发布:逆战一直检测数据异常 编辑:程序博客网 时间:2024/06/06 04:25

希尔排序(Shell Sort)是D.LShell于1959年提出来的一种排序算法。在这之前排序算法的时间复杂度基本都是O(n^2)的,希尔排序算法是突破这个时间复杂度的第一批算法之一。

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

图解希尔排序:


算法代码:

package shellsort;public class Shell {static void shell(int arr[]){int i,j,temp;int increment= arr.length;do{increment = increment/3 + 1;//步长每次设置为length/3 + 1; for(i = increment;i<arr.length;i++){if(arr[i] < arr[i-increment]){//直接插入排序temp = arr[i];for(j = i - increment;j>=0&&temp<arr[j];j-=increment)arr[j+increment] = arr[j];arr[j+increment] = temp;}}for(int a : arr){System.out.print(a+"  ");}System.out.println("");}while(increment > 1);}public static void main(String[] args) {int arr[] = {9,1,5,8,3,7,4,6,2};shell(arr);}}


原创粉丝点击