标签:i++ 直接插入排序 增量排序 图片 java 操作 数据 length return
希尔排序也称递减增量排序算法,是插入排序的一种更高效的改进版本。但是希尔排序是非稳定排序的算法。希尔排序比一般插入排序有以下几点改进:
希尔排序的基本思想是:先将整个待排序的序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行依次进行直接插入排序
以序列 1,5,4,30,6,29,5,20为例
第一趟排序:子序列数=n/2=4 四个子序列为{1,6},{5,29},{4,5},{30,20}将这四个序列排序后为{1,5,4,20,6,29,5,30}。
第二趟排序:子序列数=n/4=2 二个子序列为{1,4,6,5},{5,20,29,30}将这二个序列排序后为{1,5,4,20,5,29,6,30}。
第二趟排序:子序列数=n/8=1 一个子序列为{1,4,6,5,5,20,29,30}将这二个序列排序后为{1,4,5,5,6,20,29,30}。
public class JavaSort { public static void main(String[] args) { int a [] =new int []{1,5,4,30,6,29,5,20}; System.out.println("排序前的数组:"+Arrays.toString(a)); shellSort(a); System.out.println("排序后的数组:"+Arrays.toString(a)); } /** * * @param ary要排序的数组 * @return 返回排序好的数组 */ public static int [] shellSort(int [] ary) { int len=ary.length; for (int num= len/2; num>=1; num=num/2) {//num为子序列数,num也表示子序列元素在原来序列中相差的位置 //找到子序列,子序列用插入排序进行排序 for (int i = num; i < ary.length; i++) { int j=i-num;//子序列元素要插入的位置 int temp=ary[i];//子序列要插入的元素值暂存 while(j>0&&temp<ary[j]) {//将要插入元素子序列元素比较找到要插入元素的位置 ary[j+num]=ary[j]; j=j-num; } ary[j+num]=temp;//插入要插入的子序列元素 } } return ary; } }
运行结果:
标签:i++ 直接插入排序 增量排序 图片 java 操作 数据 length return
原文地址:https://www.cnblogs.com/shareAndStudy/p/12455186.html