数据结构与算法——直接插入排序
2015-06-11 16:59
387 查看
好久没写博客了,今天就简单总结下直接插入排序。
什么是直接插入排序?
直接插入排序就是将某一个元素与顺序表中元素进行比较,然后插入到相应的位置,使整个顺序表处于有序状态。有关数据结构的书上都会用扑克牌进行比喻说明,就跟玩扑克一样,当我们拿到几张牌时,要想整理成一个顺子,我们通常的做法就是将小的牌,插到比他大的牌的前面。具体可以看看书,想一想,还是很容易理解的。
直接插入排序的思路:每次将一个待排序的元素按照其关键码的大小插入到一个已经排好序的有序序列中。
直接插入排序有两个基本问题:
如何构造一个初始有序序列。
如何在有序序列中查找插入点。
具体实现:
什么是直接插入排序?
直接插入排序就是将某一个元素与顺序表中元素进行比较,然后插入到相应的位置,使整个顺序表处于有序状态。有关数据结构的书上都会用扑克牌进行比喻说明,就跟玩扑克一样,当我们拿到几张牌时,要想整理成一个顺子,我们通常的做法就是将小的牌,插到比他大的牌的前面。具体可以看看书,想一想,还是很容易理解的。
直接插入排序的思路:每次将一个待排序的元素按照其关键码的大小插入到一个已经排好序的有序序列中。
直接插入排序有两个基本问题:
如何构造一个初始有序序列。
如何在有序序列中查找插入点。
具体实现:
<span style="font-family:Courier New;font-size:14px;">#include <iostream> #define MAXSIZE 10 using namespace std; struct SqList{ int r[MAXSIZE+1]; //用于存储要排序的数组 r[0]用作哨兵 int length; //顺序表的长度 }; void InsertSort(SqList *L) { int j; for(int i=2;i<=L->length;i++) { //元素比较 if(L->r[i]<L->r[i-1]) { L->r[0] = L->r[i]; //将此元素赋值给哨兵 for(j=i-1;L->r[j]>L->r[0];j--) { L->r[j+1] = L->r[j]; //后移 } L->r[j+1] = L->r[0]; //将待插元素放到指定位置 } } } void Print(SqList *L) { for(int i=1;i<=L->length;i++) { cout<<L->r[i]<<" "; } } int main() { SqList L = {{0,6,8,3,11,7},5}; InsertSort(&L); Print(&L); return 0; } </span>
相关文章推荐
- 数据结构:树与二叉树_二叉树_二叉树的基本操作
- 数据结构:树与二叉树_二叉树_定义
- 数据结构:线性表的链式存储结构_单链表
- To_review_100_0---堆的整理
- 数据结构系列之折半查找树
- 数据结构学习笔记之Linklist
- 数据结构基础(1)--数组C语言实现--动态内存分配
- 数据结构和算法-007 队列
- 大话数据结构—散列表查找(哈希表)
- 数据结构表达式求值
- SDUT 2137 数据结构实验之求二叉树后序遍历和层次遍历
- BZOJ 4085:[Sdoi2015]quality(round 2 音质检测)(数据结构)
- MySQL索引背后的数据结构及算法原理
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- leetcode--Binary Tree Inorder Traversal
- Codeforces Round #306 (Div. 2) D.E. 解题报告
- Json数据结构
- XML、JSON数据结构解析
- 大话数据结构—多路查找树(B树)
- RDP协议详解