网站首页 > 精选教程 正文
插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理是将一个记录插入到已经排序好的有序序列中,从而得到一个新的、个数增1的有序序列。插入排序就像我们日常生活中整理一副扑克牌的过程:每次从剩余未排序的部分取出一张牌,然后将其插入到已排序的手牌中的正确位置。
以下是插入排序的基本步骤:
- 将数组分为两个部分,初始时左侧视为有序序列(只有一个元素或者为空),右侧视为无序序列。
- 从无序序列的第一个元素开始,与有序序列的所有元素进行比较。
- 如果当前元素比有序序列中的某个元素小,则将该元素及之后的所有元素向后移动一位,腾出空间来插入当前元素。
- 将当前元素插入到腾出的位置上,保证了插入后的序列依然有序。
- 重复以上过程,直到所有元素都被依次插入到有序序列中。
C++实现插入排序的示例代码如下:
#include <iostream>
using namespace std;
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) { // 外层循环控制待插入的元素
int key = arr[i]; // 当前需要插入的元素值
int j = i - 1; // 从当前元素前一位开始比较
// 将大于key的元素向后移动,并找到key应该插入的位置
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
// 插入key到正确的位置
arr[j + 1] = key;
}
}
// 测试函数
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
int main() {
int arr[] = { 64, 25, 12, 22, 11 };
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
cout << "Sorted array: \n";
printArray(arr, n);
return 0;
}
插入排序的时间复杂度在最好情况下(即输入数组已经是有序的)为O(n),最坏和平均情况下为O(n2)。尽管对于大规模数据集效率不高,但对于小规模数据或部分有序的数据,插入排序表现得相对较好。此外,由于其稳定性和原地排序的特点,在实际应用中有一定的适用场景。
猜你喜欢
- 2024-11-17 基础算法之「插入排序」(c语言排序算法直接插入法)
- 2024-11-17 程序猿小白进阶之路,一天学习一个算法:插入排序
- 2024-11-17 常用排序算法之插入排序(常用排序算法之插入排序规则)
- 2024-11-17 看动图学算法(三):插入排序算法原理和Java讲解
- 2024-11-17 Java程序员面试时写不出排序算法?看这篇就够了
- 2024-11-17 Python 实现经典算法之插入排序(用python排序算法)
- 2024-11-17 掌握算法-排序-插入排序(掌握算法-排序-插入排序规则)
- 2024-11-17 排序之插入排序(直接插入排序算法)
- 2024-11-17 一文掌握Python 中的排序算法——插入排序
- 2024-11-17 在 Python 中实现插入排序(Insertion Sorting)
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)