数据结构与算法-----插入排序-----直接插入排序

package jzoffer;

import java.util.Scanner;

public class InsertSort {
	public static void main(String[] args) {
		System.out.println("未排序前的数据:");
		int [] a = {5,8,2,1,4,7,6,9,5,5};
		printArray(a);
		insertSort(a);
		System.out.println("已排序后的数据:");
		printArray(a);
	}
	public static void printArray(int [] array){
		System.out.print("{");
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]);
			if(i<array.length-1){
				System.out.print(",");
			}
		}
		System.out.println("}");
	}
	public static void insertSort(int [] array){
		if(array == null || array.length<2){
			return;
		}
		for(int i =1;i<array.length;i++){
			int currentValue = array[i];//记录下待插入的数据元素
			int position = i;//记录下待插入的数据的index
			for(int j=i-1;j>=0;j--){ //遍历已经排序号的数组
				if(array[j] > currentValue){//要遍历已经排序好的数组,看把它插入到那个位置
					array[j+1] = array[j];//如果上面的判断成立的话,那么就要将已经排序好的数据中最后一个数赋给待插入的数据的位置
					position -= 1;//然后给待插入数据的位置-1,然后继续向前遍历比较
				}else{
					break;//当然如果if里面的判断条件不成立的话那就说明待插入的数据是最大的我们就不需要向后遍历了结束for循环
				}
			}
			array[position] = currentValue;//当然一趟排序完成之后,我们需要把待插入数据插入到他应该在的位置
		}
	}
}

猜你喜欢

转载自blog.csdn.net/lsm18829224913/article/details/80331854