十大排序算法——插入排序

Java实现代码:

public class Insert {
    public static void main(String[] args) {
        int[] array = new int[]{2, 3, 5, 8, 9, 0, 4, 5, 1, 6, 8, 7};
        sort(array);
        System.out.println(Arrays.toString(array));
    }
    private static void sort(int[] array) {
        int n = array.length;
        for (int i = 1; i < n; i++) {
            for (int j = i ; j >0 ; j--) {
                if (array[j] < array[j - 1]) {
                    int temp = array[j];
                    array[j] = array[j - 1];
                    array[j-1] = temp;
                }
            }
        }
    }
}

C实现代码:

//从小到大排n个个数
void Insert() { 
        //循环从第二个数组元素开始,因为arr[0]作为最初已排序部分 
        for(int i=1;i<n;i++){ 
        //temp标记为未排序第一个元素 
                int temp=arr[i];
                int j=i-1; 
                while (j>=0 && arr[j]>temp){ 
/*将temp与已排序元素从小到大比较,寻找temp应插入的位置*/ 
                          arr[j+1]=arr[j]; 
                          j--; 
              } 
                       arr[j+1]=temp; 
     } 
} 

最优复杂度:

当输入数组就是排好序的时候,复杂度为O(n),而快速排序在这种情况下会产生O(n^2)的复杂度。

最差复杂度:

当输入数组为倒序时,复杂度为O(n^2)

与冒泡、选择相同,适用于排序小列表 ;若列表基本有序,则插入排序比冒泡、选择更有效率。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 1,817评论 0 7
  • 一人在家,晚上上厕所灯亮了忽而又灭了,扑闪扑闪,因为害怕被电到,顿了一会,心里甚至在想憋着不上等家里人回来再说。后...
    筌笙箫阅读 308评论 0 4
  • 多少无边的黑夜被你点亮 只为心头的那一丝闪光 待 山花烂漫 扭头细看 曾经的端茶倒水 曾经的彻夜难眠 不过是 黎明...
    小史努比阅读 234评论 3 1
  • 本文摘要:写这篇来信主要有两个目的,一是安抚一下妈妈们的焦虑;二是期望爸爸们积极加入到孩子的教育中来。其实也只有这...
    石头聊家庭教育阅读 1,473评论 9 19
  • 废材大龄剩女的奇葩相亲之路:《爱情蜀道难》 (四十六)逆水行舟 文|菀柳青青 从汉口看望小家伙回来后的第二天,我就...
    田筱薇阅读 502评论 12 11