希尔排序
希尔排序又称缩小增量排序,就是分组插入排序,是直接插入排序的改进版
int data[];
int d = data.length/2;
先对跨度为d的数据进行直接插入排序,再对跨度为d=d/2的数据进行直接插入排序,如此循环直到d=0为止。
当d比较大时,进行排序的数据量较小,数度较快,当d较小时,由于先前的操作使得数据比较有序,而直接插入排序在数据有序时是很快的,所以希尔排序比直接插入排序要快
java代码
import java.util.Scanner; import java.util.Arrays; class Main{ public static void main(String[] args){ int[] data = new int[]{1100,192,221,12,23,1,24,56,89,2}; System.out.println(Arrays.toString(data)); shellSort(data); System.out.println("排序后的数组:"); System.out.println(Arrays.toString(data)); } public static void shellSort(int[] data){ int temp; int d = data.length/2; //d是子表间隔 while(d!=0){ //循环直到d=0为止 for(int i=d;i<data.length;i++){ //一趟直接插入排序 temp = data[i]; int j; for(j=i;j>=d;j-=d){ if(temp<data[j-d]) data[j] = data[j-d]; else break; } data[j] = temp; } d/=2; //修改子表间隔 } } }