要求
将数值数组按从小到大排序。
代码
public class Insertion {
// 对数组a中的元素进行排序
public static void sort(Comparable[] a) {
for(int i=1;i< a.length;i++) {
// 当前元素为a[i],依次和i前面的元素比较,找到一个小于等于a[i]的元素
for(int j=i;j>0;j--) {
if (greater(a[j-1],a[j])) {
// 交换元素
exch(a, j, j-1);
}else {
break;
}
}
}
}
// 比较v元素是否大于w元素
private static boolean greater(Comparable v, Comparable w) {
return v.compareTo(w) > 0;
}
// 交换数组a中,索引i和索引j处的值
private static void exch(Comparable[] a, int i, int j) {
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
}
public class Test {
public static void main(String[] args) {
Integer[] a = {4,8,6,1,3,5,6};
Insertion.sort(a);
System.out.println(Arrays.toString(a));
}
}
[1, 3, 4, 5, 6, 6, 8]
复杂度
时间复杂度
O(n^2)
空间复杂度
O(1)
稳定性分析
稳定