Java实现插入排序

Cr:排序中的一类——插入排序


/**
 * 升序排序——插入排序
 * @author Aegis
 *
 */
public class Sort {
	
	//需要排序的数组,包含一个等于情况"6"
	private int[] intArray = {9,17,5,6,4,2,1,6,8,7,11,13,14,3,10};
	
	/**
	 * 直接插入排序
	 * @param args
	 */
	public void directInsertSort(){
		for(int i=1; i<intArray.length; i++){
			int temp = intArray[i];
			int j;
			for(j=i-1; j>=0&&intArray[j]>temp; j--){ //从有序部分的最后一位往前比较
					intArray[j+1] = intArray[j]; //j位子空出
			}
			intArray[j+1] = temp; //之前有j--,所以+1
		}
		System.out.println("直接插入排序");
		for(int i=0; i<intArray.length; i++)
			System.out.println(intArray[i]);
	}
	
	/**
	 * 二分插入排序
	 * 采用二分查找方法寻找插入位置
	 * @param args
	 */
	public void binaryInsertSort(){
		for(int i=1; i<intArray.length; i++){
			int temp = intArray[i]; //记录要插入的数据
			int low = 0; //设置有序部分的初始区间
			int high = i-1;
			int mid;
			while(low <= high){
				mid = (low+high)/2;
				if(intArray[i]>intArray[mid])
					low = mid+1; //插入位置在后半部分
				else 
					high = mid -1; //插入位置在前半部分,包括等于的情况
			}
			
			for(int j=i-1; j>=high+1; j--){ //向后移动数据
				intArray[j+1] = intArray[j]; //j是空出来的位子
			}
			intArray[high+1] = temp; //记录插入正确位置		
		}
		System.out.println("二分插入排序");
		for(int i=0; i<intArray.length; i++)
			System.out.println(intArray[i]);
	}
	
	/**
	 * 希尔排序
	 * @param args
	 */
	public void shellInsertSort(){
		int d[] = {5,3,1}; //步长序列
		for(int k=0; k<d.length; k++){
			int dk = d[k];
			for(int i=dk; i<intArray.length; i++){ //dk是第1子队列的第二个元素,i表示第i个队列
				int temp = intArray[i];
				int j;
				for(j=i-dk; j>=0&&intArray[j]>temp; j=j-dk){
					intArray[j+dk] = intArray[j];
				}
				intArray[j+dk] = temp;
			}
		}
		System.out.println("希尔排序");
		for(int i=0; i<intArray.length; i++)
			System.out.println(intArray[i]);
	}
	
	public static void main(String[] args) {
		Sort directInsertSort = new Sort();
		directInsertSort.directInsertSort();
		System.out.println();
		
		Sort binaryInsertSort = new Sort();
		binaryInsertSort.binaryInsertSort();
		System.out.println();
		
		Sort shellInsertSort = new Sort();
		shellInsertSort.shellInsertSort();
		System.out.println();
	}

}

打印结果:(其他两个同,由于是竖着打印就没有贴上来)

直接插入排序 
1
2
3
4
5
6
6
7
8
9
10
11
13
14
17

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yiigel/article/details/39104365
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭