算法之插入排序法

本文介绍了插入排序的概念,强调其在近乎有序数组中的高效性,并通过图示辅助理解。接着,提供了C++和JavaScript的实现示例,对比了插入排序与选择排序的时间复杂度。在讨论中,提出了插入排序的改进方法,减少交换赋值次数,提高效率。
摘要由CSDN通过智能技术生成

插入排序法(Insertion Sort)

一,概念

  • 自行总结:当前元素小于(大于)前一个元素,则当前元素就插入到前一个元素之前,直到排序完成

  • 区别:

    • 插入排序:二层循环可以提前结束循环
    • 选择排序:二层循环要全部执行
  • 时间复杂度:O(n2)

  • 特点:如果待排序数组近乎有序,那可以很快结束二层循环,时间复杂度趋于O(n)

二,图示

更接近,插入排序改进方法的逻辑
在这里插入图片描述

三,C++实现

main.cpp

#include <iostream>
#include <algorithm>
#include "SortTestHelper.h"
#include "SelectionSort.h"

using namespace std;

template<typename T>
void insertionSort(T arr[], int n){
   

    for( int i = 1 ; i < n ; i ++ ) {
   

        // 寻找元素arr[i]合适的插入位置(和之前元素进行比较)
        // 插入排序的二层循环可以提前结束,但选择排序的二层循环要完整执行找到最小值
        // 写法1
        for( int j = i ; j > 0 ; j-- )
            if( arr[j] < arr[j-1] )
                swap( arr[j] , arr[j-1] );
            else
                break;

        // 写法2
//        for( int j = i ; j > 0 && arr[j] < arr[j-1] ; j -- )
//            swap( arr[j] , arr[j-1] );

    }

    return;
}

int main() {
   

    int n = 10000;
    cout<<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值