插入排序的原理和示例

插入排序,不断从无序区取出一个元素,插入到有序区中。

算法步骤:

  1. 假设第一个元素为有序区,第二个元素起为当前无序区,从无序区取出第一个元素(即第二个元素),与第一个元素作比较,如果较大,则插入在后面,否则插入在前面。
  2. 从无序区取出一个元素,与有序区元素进行比较,如果较小则交换位置,继续比较,直到找出插入位置进行插入。
  3. 重复第2 步。
c 复制代码
#include <stdio.h>

void insert(int *arr,int size){
        for(int i = 0;i< size;i++){
                int ele = arr[i];
                int curPosition = i;
                for(int j = i-1; j >= 0;j--){
                        if(arr[j] > ele){
                                arr[curPosition] = arr[j];
                                curPosition = j;
                        }
                }
                arr[curPosition] = ele;

        }

}

int main(){
        int arr[8] = {5,8,6,3,9,2,1,7};
        insert(arr,8);
        for(int i =0; i < 8;i++){
                printf("%d\t",arr[i]);
        }
        printf("\n");
        return 0;
}

插入排序要进行n-1轮,每一轮在最坏情况下的比较次数分别是1次,2次,3次,...,n-1次,所以它的最坏时间复杂度为O(n2)

由于插入排序也是原地排序,也没有借助额外的存储空间,所以它的空间复杂度为O(1).

选择排序与插入排序的区别:

1.选择排序的有序区中的元素的位置确定后是不变,因为它每次总是从无序区中选择最小的一个排到左侧,插入排序有序区中的元素位置是暂时的,只有排序完成后,才是固定的。

  1. 在插入排序排序后,原序列中相等元素的相对位置保持不变,所以它是稳定的排序,而选择排序则不然。
相关推荐
HugoStudio_SWAN29 分钟前
洛谷 P1420 / P1179 / B4262 最长连号、数字统计与词频统计——统计的三种面孔
c++·学习·程序人生·算法
青 春 记 忆1 小时前
LeetCode 350. 两个数组的交集 II|Python 解法详解
python·算法·leetcode
阳明山水2 小时前
销量预测2025—2026:从模型竞赛到系统融合的范式转型
人工智能·深度学习·算法·机器学习·架构
桐盛科技3 小时前
拒绝“漂绿”风险:基于边缘计算的碳排放数据清洗算法与实时校验逻辑
人工智能·算法·边缘计算
wuyk5553 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
-dzk-3 小时前
【链表】LC 138.随机链表的复制
数据结构·链表
Tongzhi20263 小时前
通芝科技考勤软件三大发展趋势:AI大模型、无感识别与数据底座
大数据·科技·算法·爬山算法
eBest数字化转型方案3 小时前
Route Optimization for FMCG:多目标排线算法的工程实现
大数据·人工智能·算法
洋不写bug4 小时前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
residual_fan4 小时前
持续对比强化学习(Continual Contrastive Reinforcement Learning)论文分享
人工智能·算法·数据挖掘·数据分析