2.1.6 在所有的主键都相同时,选择排序和插入排序谁更快?
插入排序更快
2.1.7 对于逆序数组,选择排序和插入排序谁更快?
选择排序更快
为什么?看完代码后,再解释
一、插入排序的代码
package test;
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdOut;
public class Insertion {
public static void sort(Comparable[] a){
for(int i=1; i<a.length; i++){
for(int j=i; j>0 && less(a[j], a[j-1]); j--){
exch(a, j, j-1);
}
}
}
private static boolean less(Comparable v, Comparable w){
return v.compareTo(w) < 0;
}
private static void exch(Comparable[] a, int i, int j){
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
private static void show(Comparable[] a){
for(int i=0; i<a.length; i++){
StdOut.print(a[i] + " ");
}
StdOut.println();
}
public static boolean isSorted(Comparable[] a){
for(int i=1; i<a.length; i++){
if(less(a[i], a[i-1])) return false;
}
return true;
}
public static void main(String[] args){
String[] a = In.readStrings();
sort(a);
assert isSorted(a);
show(a);
}
}
二、选择排序的代码