博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++描述基础算法之直接插入排序
阅读量:5112 次
发布时间:2019-06-13

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

由于此博文并不难,所以并不需要搬出C++特性的这些大山,所以就使用简单的C++代码描述了。^_^

直接插入排序是一种简单的插入排序法,所以适用于少量数据的排序,直接插入排序是比较稳定的一种排序算法。

其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。

插入排序:时间复杂度O(n^2)

直接插入排序是属于In-place sort(不占用额外内存或占用常数的内存),所以空间复杂度为O(1)。上一篇的冒泡排序同样如此

In-place sort的优点在于,当需要大量数据排序时,占用内存非常少。

步骤大概是这样的:

1.从第一个元素开始,该元素可以认为已经被排序          代码中   key = arr[i];就是这个意思 

2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
6.重复步骤2~5

 

下面的图是动画演示,同样是从度娘那儿讨来的,毕竟自己不会做这种图。。。。

 

 

1 #include 
2 3 using namespace std; 4 6 //// 写法1 7 void insertSort_0(int arr[], int length) 8 { 9 int i, j, key;10 for (i = 0; i < length; i++){11 key = arr[i];12 for (j = i - 1; j >= 0; j--){13 if (arr[j] > key) {14 arr[j + 1] = arr[j];15 }16 else17 break;18 }19 arr[j + 1] = key;20 }21 }22 23 //// 写法224 void insertSort_1(int arr[], int length)25 {26 int j, key;27 for (int i = 1; i < length; i++){28 key = arr[i];29 j = i - 1;30 while (j >= 0 && arr[j] > key){31 arr[j + 1] = arr[j];32 j--;33 }34 arr[j + 1] = key;35 }36 }37 38 39 40 int main()41 {42 int iArr[] = { 7, 8, 9, 5, 2, 0, 12, 6 };43 int len = sizeof iArr / sizeof(iArr[0]);44 45 cout << "排序前:";46 for (int i = 0; i < len; i++) {47 cout << iArr[i] << " ";48 }49 50 cout << "\n排序后:";51 insertSort_0(iArr, len);52 for (int j = 0; j < len; j++) {53 cout << iArr[j] << " ";54 }55 cout << endl;56 57 system("pause");58 return 0;59 }

 

 

 

转载于:https://www.cnblogs.com/XavierJian/p/5775321.html

你可能感兴趣的文章
新手算法学习之路----二叉树(在一个二叉查找树中插入一个节点)
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
基于C#编程语言的Mysql常用操作
查看>>
s3c2440实验---定时器
查看>>
MyEclipse10安装SVN插件
查看>>
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
图论例题1——NOIP2015信息传递
查看>>
uCOS-II中的任务切换-图解多种任务调度时机与问题
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
UseIIS
查看>>
集合体系
查看>>
vi命令提示:Terminal too wide
查看>>
引用 移植Linux到s3c2410上
查看>>
人与人之间的差距是从大学开始的
查看>>
MySQL5.7开多实例指导
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>