排序算法--插入排序算法

插入排序(Insertion Sort)算法通过对未排序的数据执行逐个插入至合适的位置而完成排序工作。日常生活中人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。和选择排序算法一样,当前索引左边的所有元素都是有序的,但它们的最终位置还没有确定,为了给更小的元素腾出空间,它们可能会被移动。但是当索引到达数组的右端时,数组排序就完成了。


其动态图如下:

排序算法--插入排序算法_第1张图片


算法步骤:

(1)首先对数组的前两个数据进行从小到大的排序。

(2)接着将第3个数据与排好序的两个数据比较,将第3个数据插入合适的位置。

(3)然后将第4个数据插入已经排好序的前3个数据中。

(4)不断重复上述过程,直到把最后一人数据插入合适的位置。最后,便完成了对原始数据从小到大的排序。


核心代码如下:

void insertionSort(int[] a) {
	int i, j, t, h;
	for(i = 1; i < a.length; i++) {
		t = a[i];
		j = i - 1;
		while(j >= 0 && t < a[j]) {
			a[j+1] = a[j];
			j--;
		}
		a[j+1] = t;
	}
}


实例代码如下:


package cn.honda.sort;

public class InsertionSort {

	static final int SIZE = 10;
	
	public static void main(String[] args) {
		int[] arr = new int[SIZE];
		int i;
		
		for(i = 0; i < arr.length; i++) {
			arr[i] = (int)(100 + Math.random() * (100+1));  //初始化数组
		}
		System.out.print("排序前的数组为:");
		for(i = 0; i < arr.length; i++) {
			System.out.print(" " + arr[i]);
		}
		System.out.println("\n");
		
		insertionSort(arr);
		
		System.out.print("排序后的数组为:");
		
		for(i = 0; i < arr.length; i++) {
			System.out.print(" " + arr[i]);
		}
		System.out.println("\n");
	}

	private static void insertionSort(int[] a) {
		int i, j, t, h;
		for(i = 1; i < a.length; i++) {
			t = a[i];
			j = i - 1;
			while(j >= 0 && t < a[j]) {
				a[j+1] = a[j];
				j--;
			}
			a[j+1] = t;
			
			System.out.print("第" + i + "步排序结果:");
			for(h = 0; h < a.length; h++) {
				System.out.print(" " + a[h]);
			}
			System.out.println();
		}
		System.out.println();
	}
}



运行效果:

排序算法--插入排序算法_第2张图片



你可能感兴趣的:(算法)