CSDN博客

img programs

插入排序

发表于2008/9/30 20:21:00  258人阅读

分类: 算法

对由N个int组成的数组a进行插入排序(升序)的思想:

#1. 把 a[1] 放到正确的位置(如果 a[1] > a[0],互换);

#2. 把 a[2] 放到正确的位置(如果 a[2] > a[1],互换;如果 a[1] > a[0],互换);

#3. 把 a[i] 放到正确的位置(如果 a[i] > a[i - 1],互换;… 如果 a[2] > a[1],互换;如果 a[1] > a[0],互换);

#4. 把 a[N - 1] 放到正确的位置(如果 a[N -1] > a[N - 2],互换;… 如果 a[2] > a[1],互换;如果 a[1] > a[0],互换)。

优化:#1之后,第一个元素已经有序;#2之后,第二个元素已经有序,也就是说 a[1] >= a[0],所以在比较 a[i] 和 a[i - 1] 的循环中,一旦遇到 a[i] > a[i - 1]的情况,就可以停止本次比较了(都大于a[i - 1]了,说明一定大于 a[i - 2], a[i - 3] ... a[1], a[0])。

import java.util.Arrays;
import java.util.Random;

public class InsertSort {

	public static void sort(int[] a) {
		for (int i = 1; i < a.length; i++) {
			for (int j = i; j > 0; j--) {
				if (a[j] < a[j - 1]) {
					final int tmp = a[j];
					a[j] = a[j - 1];
					a[j - 1] = tmp;
				} else {
					// a[i] is already in the correct position.
					break;
				}
			}
		}
	}

	public static void main(String[] args) {
		final int N = 10;
		final Random random = new Random(System.currentTimeMillis());
		final int[] a = new int[N];
		for (int i = 0; i < N; i++) {
			a[i] = random.nextInt(N << 1);
		}
		System.out.println(Arrays.toString(a));
		Arrays.sort(a);
		System.out.println(Arrays.toString(a));
	}

}



0 0

相关博文

我的热门文章

img
取 消
img