算法学习记录-排序——插入排序(Insertion Sort)
插入排序:
在《算法导论》中是这样描述的
这是一个对少量元素进行排序的有效算法。插入排序的工作机理与打牌时候,整理手中的牌做法差不多。
在开始摸牌时,我们的左手是空的,牌面朝下放在桌子上。接着,一次从桌子上摸起一张牌,并将它插入到左手一把牌中的正确位子上。
为了找到这个正确的位置,要将它与手中已有的每一张牌从右到左进行比较,无论什么时候,左手的牌都是排好序的。
算法思想:
将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数加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)的更多相关文章
- 【算法学习记录-排序题】【PAT A1012】The Best Rank
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- 算法学习记录-排序——冒泡排序(Bubble Sort)
冒泡排序应该是最常用的排序方法,我接触的第一个排序算法就是冒泡,老师也经常那这个做例子. 冒泡排序是一种交换排序, 基本思想: 通过两两比较相邻的记录,若反序则交换,知道没有反序的记录为止. 例子: ...
- 算法学习记录-排序——选择排序(Simple Selection Sort)
之前在冒泡排序的附录中提到可以在每次循环时候,不用交换操作,而只需要记录最小值下标,每次循环后交换哨兵与最小值下标的书, 这样可以减少交换操作的时间. 这种方法针对冒泡排序中需要频繁交换数组数字而改进 ...
- 【算法学习记录-排序题】【PAT A1016】Phone Bills
A long-distance telephone company charges its customers by the following rules: Making a long-distan ...
- 【算法学习记录-排序题】【PAT A1025】PAT Ranking
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...
- 【算法学习记录-排序题】【PAT A1062】Talent and Virtue
About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...
- 排序算法--插入排序(Insertion Sort)_C#程序实现
排序算法--插入排序(Insertion Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...
- 经典排序算法 – 插入排序Insertion sort
经典排序算法 – 插入排序Insertion sort 插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种, ...
- 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)
跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...
随机推荐
- ASP.Net 页面和后台执行的先后顺序
后台的Page_Load事件——>前台页面加载
- Bootcamp Win10蓝牙鼠标的问题
运行services.msc找到Bluetooth support service 把启动类型从手动改为自动 重新连接蓝牙鼠标
- NgStyle和NgIf控制HTML标签显示的区别
通常web开发者会选择将元素样式属性display设为none来隐藏目标元素.采用这种方式,这些元素虽然不可见却仍然保存在DOM中,这样带来的好处是,如果元素不久就需要再次显示,组件不需要重新被初始化 ...
- SQL概念及DDL语句
SQL概念 SQL全称(Structured Query Language):结构化查询语句,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询和管理关系型数据库. 其实就 ...
- java控制远程ssh-expect4j(一)
github : https://github.com/wengyingjian/ssh-java-demo.git 程序写完后,ssh连接到远程服务器上需要做的步骤都是固定的,所以我们可以通过程序来 ...
- python爬虫之路——无头浏览器初识及简单例子
from selenium import webdriver url='https://www.jianshu.com/p/a64529b4ccf3' def get_info(url): inclu ...
- C、C++、C#中struct的简单比较
比较这三者是因为C.C++.C#这三者存在着一定的血缘关系,而他们三者都有的struct却有很大的不同. 功能 C中的struct是最简单的.只能有成员变量而不能有成员函数. C++和C#中都支持,而 ...
- MySQL基础教程——mysql脚本编写
SQL,结构化查询语言,既是对数据库进行操作的语言,也是数据库脚本文件的扩展名. 要求:新建一个名为 library 的数据库,包含 book.reader 两张表,根据自己的理解安排表的内容并插入数 ...
- 斐讯k2p 月光银 硬件版本A2-软件版本22.7.8.5 刷官改系统
Mark https://huabuyu.net/斐讯k2p%20月光银%20硬件版本A2-软件版本22.7.8.5%20刷官改系统.html 详细资源推荐:恩山论坛 https://www.righ ...
- ps基础实例
一:合并多个图片 1.先新件一个图片)CTRL+N),大小定成你想要的大小 2.把你要放入的照片用PS打开 3.把放入的照片用移动工具(V)拉到新件的图片里面 4.用CTRL+T调整大小(按住SHIF ...