插入排序:

在《算法导论》中是这样描述的

这是一个对少量元素进行排序的有效算法。插入排序的工作机理与打牌时候,整理手中的牌做法差不多。

在开始摸牌时,我们的左手是空的,牌面朝下放在桌子上。接着,一次从桌子上摸起一张牌,并将它插入到左手一把牌中的正确位子上。

为了找到这个正确的位置,要将它与手中已有的每一张牌从右到左进行比较,无论什么时候,左手的牌都是排好序的。

算法思想:

将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数加1的有序表。

图解:

每一张图都是一个for循环。红色和绿色的表示 左手的牌(排好序的数组)。

以此类推。。。

代码:

 void insertionSort(myDataType *ary,int len)
{
int i,j;
myDataType key;
for (i=;i<len;i++) //第一步没有比较,直接从第二个数(下标为【1】的数开始)
{
key = ary[i]; //待插入的数 //和已经排好序的数组依次比较
j=i-;
while( j >= ) //控制比较的数组是排好序的。排好序的最后一个元素下标为 【i-1】,我们从后往前比较,这样移位比较方便
{
if (key < ary[j] )
{
myDataType temp = ary[j];
ary[j] = key;
ary[j+] = temp;
}
j--;
}
}
}

完整代码:

 #include "stdafx.h"

 typedef int myDataType;
myDataType src_ary[] = {,,,,,,,,,}; void prt_ary(myDataType *ary,int len)
{
int i=;
while(i < len)
{
printf(" %d ",ary[i++]);
}
printf("\n");
}
void insertionSort(myDataType *ary,int len)
{
int i,j;
myDataType key;
for (i=;i<len;i++) //第一步没有比较,直接从第二个数(下标为【1】的数开始)
{
key = ary[i]; //待插入的数 //和已经排好序的数组依次比较
j=i-;
while( j >= ) //控制比较的数组是排好序的。排好序的最后一个元素下标为 【i-1】,我们从后往前比较,这样移位比较方便
{
if (key < ary[j] )
{
myDataType temp = ary[j];
ary[j] = key;
ary[j+] = temp;
}
j--;
}
}
} int _tmain(int argc, _TCHAR* argv[])
{
printf("before sort:\n");
prt_ary(src_ary,); //bubble_sort(src_ary,10);
//bubble_sort_modify1(src_ary,10);
//bubble_sort_opt(src_ary,10);
//selectionSort(src_ary,10);
insertionSort(src_ary,); printf("after sort:\n");
prt_ary(src_ary,); getchar();
return ;
}

算法学习记录-排序——插入排序(Insertion Sort)的更多相关文章

  1. 【算法学习记录-排序题】【PAT A1012】The Best Rank

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  2. 算法学习记录-排序——冒泡排序(Bubble Sort)

    冒泡排序应该是最常用的排序方法,我接触的第一个排序算法就是冒泡,老师也经常那这个做例子. 冒泡排序是一种交换排序, 基本思想: 通过两两比较相邻的记录,若反序则交换,知道没有反序的记录为止. 例子: ...

  3. 算法学习记录-排序——选择排序(Simple Selection Sort)

    之前在冒泡排序的附录中提到可以在每次循环时候,不用交换操作,而只需要记录最小值下标,每次循环后交换哨兵与最小值下标的书, 这样可以减少交换操作的时间. 这种方法针对冒泡排序中需要频繁交换数组数字而改进 ...

  4. 【算法学习记录-排序题】【PAT A1016】Phone Bills

    A long-distance telephone company charges its customers by the following rules: Making a long-distan ...

  5. 【算法学习记录-排序题】【PAT A1025】PAT Ranking

    Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...

  6. 【算法学习记录-排序题】【PAT A1062】Talent and Virtue

    About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...

  7. 排序算法--插入排序(Insertion Sort)_C#程序实现

    排序算法--插入排序(Insertion Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...

  8. 经典排序算法 – 插入排序Insertion sort

    经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种, ...

  9. 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)

    跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...

随机推荐

  1. 关于锚点页内链接跳转出现问题(不响应,没有反应)的解决方法(ZT)

    我们知道,利用锚点可以实现页面链接跳转,也可以实现同一页面内的跳转功能. 例如:<a href="somepage.htm>某页面链接</a>  可以跳转链接到som ...

  2. springboot集成shiro实现权限认证

    github:https://github.com/peterowang/shiro 基于上一篇:springboot集成shiro实现身份认证 1.加入UserController package ...

  3. git从无到有建立一个仓库并上传文件

    第一步,创建仓库 登录自己的码云  第二步,本地操作 1.到你所要上传的文件夹中右键 选择git bash here 2.初始化项目 git init 3.连接远程仓库 刚才我们建立的时候的远程地址就 ...

  4. [20190618]日常学习记录(二)-flex属性及vue实战

    早上在看flex属性,总结一下它的优缺点 为什么使用flex, 她和浮动相比,代码更少.浮动要考虑左浮动右浮动,有时还要去清除浮动.flex一行代码就搞定了. 她更灵活,实现平均分配,根据内容大小分配 ...

  5. layui内置loading等待加载

    点击功能按钮之后 var loading = layer.load(0, { shade: false, time: 2*1000 }); 参数: icon:0,1,2 loading风格 shade ...

  6. java中的常用内存区域总结

    <开发实战经典>     (1)栈内存空间:保存所有的对象名称     (2)堆内存空间:保存每个对象的具体属性内容     (3)全局数据区:保存static类型的属性     (4)全 ...

  7. layout_weight属性

    layout_weight 某个控件text多行,第一行对齐,baselineAligned = "false" 可使控件对齐 weight 计算规则 剩余尺寸=父布局尺寸-子布局 ...

  8. 修复使用<code>XmlDocument</code>加载含有DOCTYPE的Xml时,加载后增加“[]”字符的错误

    C# LINQ TO XML - Remove “[]” characters from the DTD header http://stackoverflow.com/questions/12358 ...

  9. Codeforces 786E. ALT 最小割+倍增

    E. ALT http://codeforces.com/problemset/problem/786/E 题意: 给出一棵 n 个节点的树与 m 个工人.每个工人有一条上下班路线(简单路径),一个工 ...

  10. PHP的优良习惯(转)

    1.多阅读手册和源代码 没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数.就在这些函数里面包括许多有用的功能,如果你仔细阅读手册,你会经常发 ...