`
hxr521521
  • 浏览: 10394 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java插入排序和希尔排序

    博客分类:
  • java
阅读更多
今天看了下 排序 写的不好 主要写插入和希尔排序 ,我的理解插入排序就是希尔排序增量为1的特殊希尔排序,希尔排序是为了解决插入排序中的数组移动次数太多

import java.util.Arrays;


public class StraightSort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[] = {2,5,24,3,1,15};
		
		//System.out.println(Arrays.toString(sort(a)));
		System.out.println(Arrays.toString(sort2(a,a.length/2)));
	}
	
	
	
	/**
	 * 插入排序   直接插入排序 Straight insertion Sort  的基本操作是将记录插入到已经排好的有序表中,从而得到一个新的,记录数增1的有序表
	 * @param array
	 * @return
	 */
	public static int[] sort(int array[]){
		
		if(array==null)
			return array;
		
		int temp ; //用于存储插入值
		
		for(int i = 1 ; i <array.length ; i++){
			
			if(array[i]<array[i-1]){
				temp = array[i];
				int j = i-1;
				for(;j>-1&&array[j]>temp;j--){
					array[j+1] = array[j];
				}
				array[j+1] = temp;
			}
		}
		return array;
	}
	
	
	/**
	 * 希尔排序   将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入
	 *排序后得到的结果是基本有序而不是局部有序。
	 *   ----------插入排序实际就是希尔排序 的自增变量开始为1的特殊希尔排序
	 **/
	public static int[] sort2(int array[],int increment){
		//int increment = array.length/2;
		int temp;
		while(increment>=1){
			
			for(int i = increment;i<array.length;i++){
				
				if(array[i]<array[i-increment]){
					temp = array[i];
					int j = i-increment;
					for(;j>-1&&array[j]>temp;j= j - increment){
						array[j+increment] = array[j];
					}
					array[j+increment] = temp;
				}
			}
			increment = increment/2;
		}
		return array;
	}
	
	
	
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics