插入排序
简述
插入排序是一种简单直观且稳定的排序算法
插入排序十分像平时打牌的时候给整理扑克牌的过程
通常我们在打扑克整理牌的时候,是将每一章牌插入到其他已经有序的牌之中的适当位置的
插入排序也类似
图自百度百科:https://baike.baidu.com/item/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F/7214992?fr=aladdin
交换次数和比较次数:
情况 | 比较次数 | 交换次数 |
---|---|---|
最好情况(即本来数组已经有序排列) | N-1 | 0 |
最坏情况(即数组刚好逆序) | N^2/2 | N^2\2 |
平均情况 | N^2/4 | N^2\4 |
插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择
代码展示
package Sort;
import java.util.*;
public class Insertion_Sort {
//插入排序
public static void sort(Comparable[] a) {
int N =a.length;
for (int i = 0; i<N; i++) {
for(int j = i; j>0 && a[j].compareTo(a[j-1])<0; j--) {
Comparable t = a[j];
a[j] = a[j-1];
a[j-1] = t;
}
}
}
//用于打印展示数组的方法
private static void show(Comparable[] a) {
for (int i = 0; i<a.length; i++)
System.out.print(a[i]+" ");
System.out.println();
}
//用例
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String in = reader.nextLine();
String[] a = in.split(" ");
sort(a);//调用上面的选择排序方法
show(a);
}
}
输入输出结果:
输入:
35 99 75 61 85 46 84 75
输出:
35 46 61 75 75 84 85 99
排序成功!
样例可视化
例:运用插入排序排序数组{S,O,R,T,E,X,A,M,P,L,E}
Tips:没有黄色标记的元素是不用移动的
加粗的元素就是a[j]
为了插入新元素,被黄色标记的元素都往后移动了一格
i j 0 1 2 3 4 5 6 7 8 9 10
——————————————————————————
S O R T E X A M P L E
1 0 O S R T E X A M P L E
2 1 O R S T E X A M P L E
3 3 O R S T E X A M P L E
4 0 E O R S T X A M P L E
5 5 E O R S T X A M P L E
6 0 A E O R S T X M P L E
7 2 A E M O R S T X P L E
8 4 A E M O P R S T X L E
9 2 A E L M O P R S T X E
102 A E E L M O P R S T X