知识大全 排序 - 插入排序 - 直接插入排序(一)
Posted 位置
篇首语:大鹏一日同风起,扶摇直上九万里。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 插入排序 - 直接插入排序(一)相关的知识,希望对你有一定的参考价值。
插入排序(Insertion Sort)的基本思想是 每次将一个待排序的记录 按其关键字大小插入到前面已经排好序的子文件中的适当
位置 直到全部记录插入完成为止
本节介绍两种插入排序方法 直接插入排序和希尔排序
直接插入排序基本思想
基本思想
假设待排序的记录存放在数组R[ n]中 初始时 R[ ]自成 个有序区 无序区为R[ n] 从i= 起直至i=n为止 依次将
R[i]插入当前的有序区R[ i ]中 生成含n个记录的有序区
第i 趟直接插入排序
通常将一个记录R[i](i= … n )插入到当前的有序区 使得插入后仍保证该区间里的记录是按关键字有序的操作称第i
趟直接插入排序
排序过程的某一中间时刻 R被划分成两个子区间R[ i ](已排好序的有序区)和R[i n](当前未排序的部分 可称无
序区)
直接插入排序的基本操作是将当前无序区的第 个记录R[i]插人到有序区R[ i ]中适当的位置上 使R[ i]变为新的有
序区 因为这种方法每次使有序区增加 个记录 通常称增量法
插入排序与打扑克时整理手上的牌非常类似 摸来的第 张牌无须整理 此后每次从桌上的牌(无序区)中摸最上面的 张并插入左
手的牌(有序区)中正确的位置上 为了找到这个正确的位置 须自左向右(或自右向左)将摸来的牌与左手中已有的牌逐一比较
一趟直接插入排序方法
简单方法
首先在当前有序区R[ i ]中查找R[i]的正确插入位置k( ≤k≤i );然后将R[k i ]中的记录均后移一个位置 腾出k位
置上的空间插入R[i]
注意
若R[i]的关键字大于等于R[ i ]中所有记录的关键字 则R[i]就是插入原位置
改进的方法
一种查找比较操作和记录移动操作交替地进行的方法
具体做法
将待插入记录R[i]的关键字从右向左依次与有序区中记录R[j](j=i i … )的关键字进行比较
① 若R[j]的关键字大于R[i]的关键字 则将R[j]后移一个位置;
②若R[j]的关键字小于或等于R[i]的关键字 则查找过程结束 j+ 即为R[i]的插入位置
关键字比R[i]的关键字大的记录均已后移 所以j+ 的位置已经腾空 只要将R[i]直接插入此位置即可完成一趟直接插入排序
直接插入排序算法
算法描述
void lnsertSort(SeqList R)
//对顺序表R中的记录R[ n]按递增序进行插入排序
int i j;
for(i= ;i<=n;i++) //依次插入R[ ] … R[n]
if(R[i] key
//应在原有位置上
R[0]=R[i];j=i-1; //R[0]是哨兵,且是R[i]的副本
do //从右向左在有序区R[1..i-1]中查找R[i]的插入位置
R[j+1]=R[j]; //将关键字大于R[i].key的记录后移
j-- ;
while(R[0].key
R[j+1]=R[0]; //R[i]插入到正确的位置上
//endif
//InsertSort
cha138/Article/program/sjjg/201311/23808相关参考
哨兵的作用 算法中引进的附加记录R[]称监视哨或哨兵(Sentinel) 哨兵有两个作用 ①进人查找(插入位置)循环之前它保存了R[i]的副本使不致于因记录后移而丢失R[i]的内容; ②它
插入排序的准则是在有序序列中插入新的记录以达到扩大有序区的长度的目的一趟直接插入排序的基本思想则是:在对记录序列R[n]的排序过程中区段R[i]中的记录已按关键字非递减的顺序排列将R[i]插入到有
今天我回顾了一下原来的排序方法现在分享如下冒泡排序两种实现方式一个是直接实现如下 int[]a=; inttemp=; for(inti=;ia[j+]) temp=a[j]; a[
二分插入排序 二分插入排序查找操作利用二分查找来实现由此进行的插入排序称为二分插入排序二分插入排序算法 cha138/Article/program/sjjg/201311/23
(二)插入排序 直接插入排序 voidInsertSort(Sqlist&L)//对顺序表L作直接插入排序 for(i=;i<=Llen
希尔排序(ShellSort)是插入排序的一种因DLShell于年提出而得名 希尔排序基本思想 基本思想 先取一个小于n的整数d作为第一个增量把文件的全部记录分成d个组所有距离为dl的倍数的
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
希赛教育计算机专业考研专业课辅导招生 希赛教育计算机专业考研专业课辅导视频 希赛教育计算机考研专业课在线测试系统 构成有序链表的过程和直接插入排序的过程基本相同先生成一个只含一个记录的有序链
将哨兵放在R[n]中被排序的记录放在R[n]中重写直接插入排序算法以单链表作为存储结构实现直接插入排序算法 设计一算法使得在尽可能少的时间内重排数组将所有取负值的关键字放在所有取非负值的关键
排序是组织数据最基本的运算排序的方法也很多本章给出了几种典型的排序方法见下表 排序类别插入排序交换排序选择排序归并排序分配排序 排序方法直接插入冒泡法直接选择*归并排序箱排序 希尔排序*快速