首页 > 其他分享 >插入排序

插入排序

时间:2024-03-20 22:16:15浏览次数:28  
标签:nums int 插入排序 元素 len array sequeue

插入排序

1. 解决的问题

在已经排好序的序列中,插入一个新元素,让序列依旧保持有序,如优先级队列

2. 核心知识

  • 0个或者1个元素,已经是排好序的
  • 交换位置的条件(升序):
    • 当前元素比后者大(sequeue[i] > sequeue[i+1])
    • 当前元素比前者小(sequeue[i] < sequeue[i-1])
  • 2层循环
    • 第1层:准备要插入的元素,从索引1开始
    • 第2层:将当前要插入的元素,前后交换位置直到让整个序列保持有序的位置

3. C++代码实现

#include <iostream>
using namespace std;

// 定义数组的长度
const int array_len  = 7;

template<class T>
void insertSort(T(& nums)[array_len], int n) {
    // 索引为0的元素,只有1个,默认就是排好序的,从第二个元素开始,依次添加到有序列表中
    for (int i = 1; i < array_len; i++) {

        // i 表示当前要插入的值
        for (int j=i; j > 0; j--) {
            // 若当前值比后者小,则交换位置,若发现当前值比之前值大,则停止交换,已经到和合适的位置
            if (nums[j] < nums[j-1]) {
                T temp = nums[j];
                nums[j] = nums[j-1];
                nums[j-1] = temp;
            } else {
                break;
            }
        }
    }
}

int main() {
    // 定义数组的长度
    int nums[array_len] = {2, 3, 4, 5, 999, 33, 42};
    insertSort(nums, sizeof nums / sizeof nums[0]);

    // 输出排序后的数组
    for (int& num: nums) {
        cout << num << endl;
    }
}

标签:nums,int,插入排序,元素,len,array,sequeue
From: https://www.cnblogs.com/2bjiujiu/p/18086190

相关文章

  • 11--插入排序
    算法描述:从当前位置开始,从后往前找比当前数字小的,插入到这个小的数字的后面,在找的过程中,如果发现一个比当前数字大,同时将这个数字往后挪动,其中从后往前是重点。插入排序的时间复杂度是,特别地,若完全有序则时间复杂度为空间复杂度为,并且它是稳定的。插入排序的特点:越有序越快......
  • 排序算法01 - 插入排序 (C语言)
    原理将a[0]作为哨兵,然后从a[2]开始遍历数组,如果发现前者比后者大,则将后者存入哨兵,再从后向前调整数组元素的位置,最后将哨兵插入即可。图示代码#include<stdio.h>constintN=10010;inta[N];n;voidinsert_sort(inta[]){intj;for(inti=2;i<=n;i++){......
  • 14_学习日志_数据结构_冒泡排序_快速排序_插入排序
    #include<编织有意义的谎言,使我相信闭上眼再睁开眼时的世界是同一个>1.介绍    从后往前或者从前往后开始两两比较元素,使得最小数上浮或者最大数下沉为冒泡排序,快速排序利用分治思想,使得基准数左边都存放相对较小数,右边存放较大数,两边再按照同样的做法重复。插入排序......
  • 选择、冒泡、插入排序——左神数据结构算法Day1学习笔记
    时间复杂度:算法的常数操作数量级的数学表达式中,去除常数的最高阶项,比如aN²+bN+c的时间复杂度就是O(N²)。时间复杂度是数据量大到一定程度时,评价算法优劣的指标。当时间复杂度相同时,分析不同数据样本下的实际运行时间来比较算法的优劣。额外空间复杂度:在执行代码过程中申请的......
  • 147. 对链表进行插入排序(中)
    目录题目题解优化题目给定单个链表的头head,使用插入排序对链表进行排序,并返回排序后链表的头。插入排序算法的步骤:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在......
  • 插入排序分析
    插入排序(升序)复杂度分析可以把插入排序想象成抽扑克牌,从牌堆中每抽一张牌我们就和手牌比较并插入。一般,我们习惯大牌放左边,小牌放右边,那么我们抽牌时从左往右(或从右往左)把抽的牌和手牌对比,找到,放入手牌,这个过程就可以看作时插入排序1.代码实现插入排序代码实现比较简单#in......
  • Python数据结构与算法05——插入排序 shell排序
    插入排序 definsrt_sort(aimlist):n=len(aimlist)forcurinrange(1,n):i=curwhilei>0:ifaimlist[i]<aimlist[i-1]:aimlist[i],aimlist[i-1]=aimlist[i-1],aimlist[i]i-=1e......
  • 912.排序数组--插入排序
    1.题目介绍给你一个整数数组nums,请你将该数组升序排列。示例1:输入:nums=[5,2,3,1]输出:[1,2,3,5]示例2:输入:nums=[5,1,1,2,0,0]输出:[0,0,1,1,2,5]2.题解2.1插入排序思路主要思路就是创建一个有序区域和无序区域,不断从无序区域取一张出来顺序插入有序区域即可代......
  • 二进制插入排序
    """要运行文档测试,请执行以下命令:python-mdoctest-vbinary_insertion_sort.py或python3-mdoctest-vbinary_insertion_sort.py要进行手动测试,请运行:pythonbinary_insertion_sort.py"""defbinary_insertion_sort(collection:list)->list:......
  • C++实现直接插入排序、冒泡排序、快速排序、选择排序(含调试程序)
    #include<iostream>#include<fstream>#include<string>#include<vector>#include<algorithm>usingnamespace::std;classSolution{public: //直接插入排序 voidinsertsort(vector<int>&num){ for(inti=1;i<num......