插入排序
插入排序(Insertion sort)
- 插入排序原理
? ? ? 插入排序原理:插入排序的原理类似于平时打扑克牌进行排序时的原理
- 把所有的元素分为两组,一组为已排序的另外一组为没有排序的(如果没有已排序的,默认第一个元素为已排序的)
- 找到未排序的组中的第一个元素,向已经排序的组中进行插入
- 倒叙遍历已经排序的组,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把这个带插入元素进行插入,后续的元素依次向后移动一位。
- 插入排序代码
public class InsertionSort {
private static boolean greater(Comparable v, Comparable w){
return v.compareTo(w)>0;
}
private static void exch(Comparable[] a,int i,int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void sort(Comparable[] a){
for (int i =1;i<a.length;i++){
for (int j = i;j>0;j--){
//比较索引j处的值和j-1处的值,如果索引j-1处的值比j的值大则交换位置
// 如果不大则已经找到合适的位置,结束循环
if (greater(a[j-1],a[j])){
exch(a,j-1,j);
}else {
break;
}
}
}
}
}
- 插入排序的时间复杂度和稳定性
时间复杂度为:O(n2)
稳定性:插入排序时稳定算法
插入排序
原文地址:https://www.cnblogs.com/zuzuzu-code/p/13340925.html