插入排序
-
原理:插入排序类似于我们在打麻将时整理麻将,我们需要将新来的麻将一张一张的插入到已经有序的麻将序列中。直到所有的麻将序列有序
-
过程示意图
假设待排序的麻将如下图所示:
把第一张麻将三筒作为初始的有序序列;
第一轮:当第二张麻将一筒到来时,由于其小于三筒,故交换这两张牌;第一、第二张牌组成的序列有序,第一轮排序结束。
第二轮:当第三张牌四筒到来时,由于四筒大于三筒,故前三张牌有序,第二轮排序结束。
第三轮:当第四张牌二筒到来时,由于二筒小于四筒,交换;交换后,二筒仍小于三筒,继续同三筒交换;交换后,二筒大于一筒,序列有序,第三轮结束。
如上所述,一直到第n-1轮,其中n为序列长度,麻将序列排定。完成排序后的序列如下图所示:
-
动图演示
- 时间复杂度 O ( n 2 ) O(n^2) O(n2)
Java代码
public class Insertion {
public static void sort(Comparable[] a) {
int n = a.length;
for (int i = 1; i < n; ++i) { //i左侧的元素是有序的(但最终的位置还不确定)
for (int j = i; j > 0 && a[j].compareTo(a[j - 1]) < 0; --j) {
Comparable temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
}