算法学习记录-排序——插入排序(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) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...
随机推荐
- CentOS7.5 搭建mycat1.6.6
1.环境及版本 操作系统: CentOS 7.5 数据库:MySQL 5.7.23 jdk:1.8.0_191 mycat:1.6.6.1 cat /etc/centos-release mysq ...
- ASPCTJ
ublic interface ISomeService { public void doSome(); public String dade(); } public class SomeServic ...
- feign实现服务间的负载均衡
feign Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单.我们只需要使用Feign来创建一个接口并用注解来配置它既可完成.它具备可插拔的注解 ...
- HTML5标签选择指引
- 零基础逆向工程19_PE结构03_代码节空白区添加代码_shellcode
1.获取MessageBox地址,构造ShellCode代码 三种获取方法,参考文章末的一篇帖子. E8 E9计算公式 call 的硬编码:E8 00 00 00 00 jmp 的硬编码:E9 00 ...
- linux系统基本结构-《循序渐进linux》
1.linux控制台 linux系统由桌面控制台(X -Window视窗)和字符控制台组成.字符控制台是linux的核心,默认linux下有6个字符控制台. 字符控制台--〉X-Window下:ctr ...
- socket tcp使用recv接收数据时,返回errno错误代码88
原因:就是recv函数的第一个参数不是可用的,也就是第一个参数不是建立连接时返回的文件描述符. 解决方法:xxx
- 在一个另一个文件中 #include一个**dlg.h文件,会发生dlg的资源ID未定义的错误 :
1 在一个另一个文件中 #include一个**dlg.h文件,会发生dlg的资源ID未定义的错误 : dlg1.h(23) : error C2065: 'IDD_DIALOG1' : und ...
- Write Once, Run Anywhere:这不是Java,这是C#
注意,本文目的并非挑起语言之争.虽然有为C#平反之意,但主要还是介绍Mono并进行简单的测试. UPDATED: 25th August 2012 更新了「Compile Once, Run Anyw ...
- centos7 python3 Saltstack配置
Python安装完毕后,提示找不到ssl模块 pip is configured with locations that require TLS/SSL, however the ssl module ...