博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
*直接插入排序
阅读量:5875 次
发布时间:2019-06-19

本文共 1303 字,大约阅读时间需要 4 分钟。

首先,把书上的算法简化一下,直接用数组研究更直观。

定义一个数组:

int a[]={
23,5,17,35,12,50,75,21};int length=sizeof(a)/sizeof(int); /* 计算长度 */

它假设第一个元素是有序的,然后用第二个元素(下一个元素)和它进行比较,通过循环移动判定,得到一个有序列。

得到一个有序列之后,再用下一个元素和这个有序列进行比较,这里的比较,就是局部比较,采用的是尾插法,从后往前。

比如,前两个元素排成有序列后,得到:5 23,接着,用17和这个有序列比较,方式是从右到左。

此处有个注意的地方,假如比较的数据一直小于有序列,可能会造成数组越界,所以在判定的时候要约束一下范围。
下一个问题,一共比较的次数,这里应该是总长度-1,假如10个数据,需要比较9次。

#include 
using namespace std;int main(void){ int a[]={
6,9,2,3,15,7,18,10,21}; int length=sizeof(a)/sizeof(int);/*计算数组长度*/ int j,e; for(int i=0;i
-1 && e>a[j]) /*判定移动*/   {   a[j+1]=a[j];    j--;   }   a[j+1]=e;/*在合适的位置插入数据,而且必定是在j+1的位置*/ } for(i=0;i

记忆思路(四步):

初始化j: j=i

赋值e : e=a[j+1]
循环移动 while()
插入e a[j+1]=e;

另外,书上采用关键字key,模型与之完全相同。但是,关键的还是模型,代码太多,有时根本无法记住,所以简化也是一种记忆的方式!

书上代码参考:

void InsertSort(SqList *L)/*直接插入排序*/{    int i,j;    DataType t;    for(i=0;i
length-1;i++) /*前i个元素已经有序,从第i+1个元素开始与前i个的有序的关键字比较*/ { t=L->data[i+1]; /*取出当前待排序的元素*/ j=i; while(j>-1&&t.key
data[j].key)/*寻找当前元素的合适位置*/ { L->data[j+1]=L->data[j]; j--; } L->data[j+1]=t; /*将当前元素插入合适的位置*/ }}

转载于:https://www.cnblogs.com/tinaluo/p/5248179.html

你可能感兴趣的文章
commandLink/commandButton/ajax backing bean action/listener method not invoked (转)
查看>>
RedHat 5.6_x86_64 + ASM + RAW+ Oracle 10g RAC (二)
查看>>
就是一个表格
查看>>
找回使用Eclipse删除的文件
查看>>
移动开发Html 5前端性能优化指南
查看>>
《系统架构师》——操作系统和硬件基础
查看>>
如何看待一本图书
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
开发进度——4
查看>>
JS里验证信息
查看>>
Akka actor tell, ask 函数的实现
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>