数据结构 直接插入排序
来源:互联网 发布:企业淘宝开店流程步骤 编辑:程序博客网 时间:2024/05/22 02:25
Ⅰ )算法思想
直接插入排序是一种最基本的插入排序方法,其基本操作方法是将第i个记录插入到第i-1 个已经排好序的记录中。具体过程为:将第i个记录的关键字Ki,顺次与其前面记录的关键字K (i-1) 、K(i-2)、K(i-3),...K1 经行比较,将所有关键字大于Ki 的记录依次向后移动一个位置,直到遇到一个关键字小于或者等于Ki的记录 Kj,此时Kj后面必为空位置,将第i 个记录插入空位置即可。完整的直接插入排序是从 i=2 开始的,也就是说,将第一个记录视为已排好序的单元素子集合,然后,将第二个记录插入到单元素子集合中。从i 循环到 n,即可实现完整的直接插入排序。
Ⅱ)源代码
//直接插入排序
#include<stdio.h>
#define MaxSize 50
typedef struct
{
int key; //记录关键字
}RecordType; //记录类型
typedef struct
{
int length;
RecordType r[MaxSize + 1]; //记录空间,0单元做监视哨
}RecordList;
void InsertSort(RecordTyper[],intlength) //直接插入排序
{
for (int i = 2; i <=length; i++) //i从2开始
{
int j; //插入值前一个数的下标
r[0] = r[i]; //将要插入的值赋给监视哨
j= i - 1;
while (r[0].key <r[j].key) //当要插入的值小于前一个数
{
r[j + 1] = r[j];
j = j - 1;
}
r[j + 1] = r[0]; //j=i-1,r[j+1]=r[i],相当于位置不变
}
}
int main(void)
{
RecordType r[] = { 0,12, 15, 85, 45, 67, 65, 90, 50 };
InsertSort(r, 8);
for (int i = 1; i <= 8; i++) //循环输出排序结果
{
printf("%d ",r[i]);
}
return 0;
}
算法的要点:①使用监视哨r[0] 临时保存待插入的记录②从后面往前查找应插入的位置,③查找与移动用同一循环完成。
Ⅲ)算法分析
(1)从空间角度来看,只需要一个辅助空间r[0]。
(2)从时间角度来看,主要时间耗费在关键字比较和移动元素上。
(3)直接插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。
(4)直接插入排序是稳定的。
- {数据结构}直接插入排序
- 数据结构--直接插入排序
- 【数据结构】直接插入排序
- 数据结构---直接插入排序
- 数据结构-直接插入排序
- 数据结构:直接插入排序
- 【数据结构】直接插入排序
- 数据结构----直接插入排序
- 数据结构--直接插入排序
- [数据结构]直接插入排序
- 数据结构---直接插入排序
- 数据结构 直接插入排序
- 数据结构直接插入排序
- 数据结构-插入排序-直接插入排序
- 数据结构之直接插入排序
- 数据结构--直接插入排序实现
- C++数据结构--直接插入排序
- 数据结构之 直接插入排序
- JS的document.execCommand()
- 拓扑排序核心代码
- 字符输出流(写)常用方法2
- 统一配置服务——spring cloud config
- 干货分享丨如何恢复Linux下误删etc目录数据
- 数据结构 直接插入排序
- 参数化防止注入
- Linux中静态库和共享库的制作方法
- EditTextt如何设置获取焦点后,光标在末尾的解决办法
- CaptureMouse/CaptureStylus 可能会失败
- "=="和equals方法究竟有什么区别?
- day01
- java数组
- RxJava:walfud 彻底搞懂 RxJava 系列 笔记