插入排序_ O(n^2)

定义:
从索引1开始,与前面的元素逐个比较,若比前面的元素小,则交换位置。
由于前面的序列是有序的,若当前元素大于前一个元素,那么它就肯定大于前面所有元素,则可以提前终止内循环。
优化:
由于插入排序,每比较一次,若当前元素小于前一个元素就会相互交换位置。非常损耗性能。
可以先将当前元素的值用一个变量记下来,将前面大于此变量值的元素后移一位,直至前面的元素值不大于此变量的值,则终止内循环,将此变量值赋予此时的元素位置。

特点:
1.由于插入排序可以提前终止内循环,当要排序的数组近乎有序时,此时插入排序的时间复杂度可以进化到O(n)级别。
2.插入排序的常系数很小,在数据量n比较小的时候,插入排序比O(nlogn)的算法有优势。

c++代码:

#include <iostream>
using namespace std;

template <typename T>
void insertionSort( T arr[], int n ){
    for(int i=1; i<n; i++){
        T temp = arr[i];
        int j;
        //前面都是排好序的,如果你比上一个大的话,就肯定比前面所有的大,可以直接结束这层for循环。
        for( j=i; j>0 && arr[j-1]>temp; j--){
            arr[j] = arr[j-1];
        }
        arr[j] = temp;
    }
}

Java代码:

public class InsertionSort {
    
    public static void sort( Comparable[] arr ){
        for(int i=1; i<arr.length; i++){
            Comparable temp = arr[i];
            int j;
            for(j=i; j>0 && arr[j-1].compareTo(temp)>0; j--){
                arr[j] = arr[j-1];
            }
            arr[j] = temp;
        }
    }
    
}

插入排序可视化🌰 http://mengmei219.top/Algorithm/insertSort/insertSort.php

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 苦于学了忘,忘了学,部门大佬给机会周会每周一道算法题开阔思维,那我只能从最基础的学起来了。该系列一边学码UML加深...
    _____Mori_阅读 3,785评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 10,037评论 0 5
  • 关于红色特质,大抵离不开这些词“浪漫 多情 梦想家 博爱”。 文章提及: 1.“ 红色所体验的生命是一个巨大的游乐...
    F北落师门阅读 1,207评论 0 1
  • 行走在阳光肆意抛洒的街头,耳朵里汹涌着贝多芬的《英雄》。激动人心的第一乐章之后,有个疑惑萦绕在心头,那就是英雄是什...
    俗然阅读 3,269评论 3 10
  • 小花篮、花棒槌、拨浪鼓、小木车,花刀银枪和宝剑!老大爷戴个遮阳帽,备个小马扎,顶着大太阳,蹬着被打扮的花枝招展的自...
    亲吻月亮的女孩阅读 2,444评论 0 1

友情链接更多精彩内容