算法 - 排序 - 插入排序 (Insertion Sort)

本文介绍了插入排序的基本思想、性能分析,并提供了直接插入排序、折半插入排序和希尔排序的C++代码实现。重点讲解了直接插入排序与折半插入排序的区别,以及希尔排序的增量序列选择对时间复杂度的影响。
摘要由CSDN通过智能技术生成

算法 - 排序 - 插入排序 (Insertion Sort)

返回分类:全部文章 >> 基础知识

返回上级:算法 - 查找与排序 (Searching and Sorting)

本文将用C++实现插入排序算法。

在查看本文之前,需要一些程序语言的基础。

常用插入排序:

  • 直接插入排序 (Direct Insertion Sort) ;

  • 折半插入排序 (Binary Insertion Sort) ,也称二分插入排序;

  • 希尔排序 (Shell Sort) ,也称缩小增量排序 (Diminishing Increment Sort) 。

所有排序方法中,统一使用如下库与结构:

// Author: https://blog.csdn.net/DarkRabbit
// Sorted Dependency

#pragma once

#include <algorithm>
#include <vector>
#include <stack>

template<typename T>
struct MyItem
{
   
    int key;
    T data;

    MyItem(){
    key = -1; }
    MyItem(const int& k) : key(k){
    }
    MyItem(const int& k, const T& d) : key(k), data(d){
    }
};

数据表统一使用了std::vector<MyItem<T>>,如果你使用静态数组MyItem<T>[]或指针数组MyItem<T>*,那么还要传入元素数量size

示例所用数据:

  • 元素数量为size = 15

  • 关键字为key = { 123, 122, 565, 22, 3, 64, 73, 44, 287, 6, 9, 83, 25, 42, 13 }



1 插入排序简述 (Introduction)

插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。

常用插入排序:

  • 直接插入排序 (Direct Insertion Sort) ;

  • 折半插入排序 (Binary Insertion Sort) ,又称二分插入排序;

  • 希尔排序 (Shell Sort) ,又称缩小增量排序 (Diminishing Increment Sort) 。

折半插入排序与直接插入排序只是在寻找位置有所不同,这是因为前面的元素已经排过序了。

折半插入排序再插入第 i 个元素时,需要经过 ⌈ log ⁡ 2 i ⌉ + 1 \lceil \log_2i \rceil + 1 log2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值