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

1、设置间隔并循环

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

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

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

java排序算法之希尔排序(100%原创,哈哈)_第1张图片

 

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); 
	}
	
	
}


 

你可能感兴趣的:(java排序算法之希尔排序(100%原创,哈哈))