java排序算法之希尔排序(100%原创,哈哈)

来源:互联网 发布:现在用网络怎么赚钱 编辑:程序博客网 时间:2024/05/22 12:07

1、设置间隔并循环

2、每个间隔内进行插入排序

注意:最外层循环为间隔的个数,第二层循环为每个间隔内插入排序的次数,第三层循环为每个间隔内的每一种情况下的插入排序,例如第一层为gap=5、2、1的循环

第二层为89、81和12、27和65、2和97、61和61、98 的循环,第三层为89和81的内部插入排序

 

package com.sor;import java.util.Random;public class TestShellSort {//[18, 87, 42, 72, 52, 18, 39, 61, 37, 0]   public static int[] shellSort(int[] r){   int gap=r.length/2;   //间隔循环次数   while (gap>0) {   //每一次间隔循环次数   for (int i = 0; i < gap; i++) {   //每个间隔的每次比较进行插入排序,第一次写的时候没有写i,循环里面嵌套的逻辑一般与循环变量有关系,切记                             for (int j =i+gap; j <r.length; j+=gap) {   //保存待插入值   int key=r[j];   //保存索引值,用以标记待插入位置   int index=j;   while (index-gap>=0&&r[index-gap]>key) {r[j]=r[index-gap];index-=gap;}   r[index]=key;}}   gap/=2;   }      return r;   }public static void display(int[] R){          System.out.println();          for(int i=0;i<R.length;i++){              System.out.print(R[i]+" ");          }      }  public static void main(String[] args) {      final int M = 10;//定义数组大小为50           int []R = new int[M];          for(int i=0;i<M;i++){              R[i] = new Random().nextInt(100);//生成100以内的随机数           }          display(R);          R = shellSort(R);          display(R); }}


 

原创粉丝点击