【入门级-算法-6、排序算法: 插入排序】

一、插入排序算法思想

插入排序(Insertion Sort)的基本思想:

1、将数组分为已排序和未排序两部分;初始时,已排序部分只有一个元素(第一个元素)。

2、依次将未排序部分的元素插入到已排序部分的正确位置。

3、每插入一个元素,已排序部分就增加一个元素,未排序部分就减少一个元素。

4、重复这个过程,直到所有元素都插入到正确的位置。

二、算法步骤(以升序为例)

1、假设有一个数组 arr,长度为 n;从 arr1(第二个元素)开始,作为当前需要插入的元素(key)。

2、将 key 与它前面的元素(已排序部分)从后向前依次比较。如果前面的元素大于 key,则将该元素向后移动一位。继续向前比较,直到找到小于或等于 key 的元素,或者到达数组开头。将 key 插入到找到的位置的后一个位置。

3、重复上述过程,直到所有元素都处理完毕。

三、举例说明

#include <stdio.h>

// 插入排序函数 (升序)

void insertionSort(int arr\[\], int n) {

int i, j, key;

// 从第二个元素开始(下标1),作为要插入的元素

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

key = arri; // 当前需要插入的元素

j = i - 1; // 从当前元素的前一个开始比较

// 将比 key 大的元素都向后移动一位

while (j >= 0 && arrj > key) {

arrj + 1 = arrj;

j = j - 1;

}

// 将 key 插入到正确的位置

arrj + 1 = key;

}

}

// 打印数组的函数

void printArray(int arr\[\], int size) {

int i;

for (i = 0; i < size; i++) {

printf("%d ", arri);

}

printf("\n");

}

// 主函数测试

int main() {

int arr\[\] = {12, 11, 13, 5, 6};

int n = sizeof(arr) / sizeof(arr0); // 计算数组长度

printf("原始数组: \n");

printArray(arr, n);

insertionSort(arr, n); // 调用排序函数

printf("排序后的数组: \n");

printArray(arr, n);

return 0;

}

输出结果如下:

原始数组:

12 11 13 5 6

排序后的数组:

5 6 11 12 13

插入排序是一种简单直观的排序算法,特别适合小规模数据或基本有序的数据。虽然时间复杂度为O(n²),但由于其实现简单、稳定、空间效率高等特点,在实际编程中仍有其用武之地,特别是在作为其他高级算法的组成部分时。

相关推荐
来一碗刘肉面7 分钟前
串的定义与基本操作
数据结构
geovindu20 分钟前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
三克的油28 分钟前
数据结构-1
数据结构
晚风叙码39 分钟前
C++ vector底层模拟实现与迭代器失效深度剖析
c++·算法
To_OC9 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
2401_841495649 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
爱刷碗的苏泓舒14 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
烬羽16 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米16 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法