数据结构核心代码 day21

本文详细介绍了两种插入排序算法:直接插入排序和折半插入排序。直接插入排序通过将元素逐个插入已排序的序列中实现排序;而折半插入排序则利用了二分查找来确定插入位置,提高了效率。这两种排序算法在理解及实现上都非常重要,是算法学习的基础内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:排序这一章也全是重点。
折半插入排序,希尔排序,冒泡排序,快排,堆排序,这些排序非常重要。一定要掌握

第八章 排序
8.1 插入排序
直接插入排序

void InsertSort(ElemType A[], int n) {
//直接插入排序
int i, j;
for (i = 2; i <= n; i++) //依次将A[2]~A[n]插入到前面已排好的序列
if (A[i].key < A[i - 1].key) { //若A[i]的关键码小于其前驱,需将A[i]插入有序表
A[0] = A[i]; //复制为哨兵,A[0]不存放元素
for (j = i - 1; A[0].key < A[j].key; --j) //从后往前查找待插入位置
A[j+1] = A[j]; //向后挪位
A[j + 1] = A[0]; //复制到插入位置
}
}

折半插入排序
void InsertSort(ElemType A[], int n) {
//折半插入排序
int i, j, low, high, mid;
for (i = 2; i <= n; i++) { //依次将A[2]~A[n]插入到前面已排序序列
A[0] = A[i]; //将A[i]暂存到A[0]
low = 1; high = i - 1; //设置折半查找的范围
while (low <= high) { //折半查找(默认递增有序)
mid = (low + high) / 2; //取中间点
if (A[mid].key > A[0].key) high = mid - 1; //查找左子表
else low = mid + 1; //查找右子表
}
for (j = i - 1; j >= high + 1; --j)
A[j + 1] = A[j]; //统一后移元素,空出插入位置
A[high + 1] = A[0]; //插入操作
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值