插入排序
假设现在有一组数据:Integer[] a ={6,5,8,9,4,2,2,0,2,1};我们想用插入排序对其进行升序排序。
插入排序的思想:
从第二个数据开始,向前比较,如果小于就交换,如果大于就终止(因为前面的数据已经有序了)。
第三个数据大于第二个数据所以不用交换。
第四个数据大于第三个数据不用交换。
第五个数据小于第四个数据所以要交换,此时索引变为第四个数据。小于第三个数据所以要交换,索引变为第三个数据,小于第二个数据所以要交换,索引为第二个数据。小于第一个数据,所以要交换。
。。。
直至整个数组有序。
以下是实现过程:
至此数组已有序
我们可以用Java代码来实现此排序,如下所示:
public static void sort(Comparable[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0; j--) {
if (Compare(a[j - 1], a[j])) {
exchange(a, j - 1, j);
} else {
break;
}
}
}
}
private static boolean Compare(Comparable i, Comparable j) {
return i.compareTo(j) > 0;
}
private static void exchange(Comparable[] a, int i, int j) {
Comparable temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
执行结果:
[0, 1, 2, 2, 2, 4, 5, 6, 8, 9]
Process finished with exit code 0