由于此博文并不难,所以并不需要搬出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

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

 #include <iostream>

 using namespace std;

 //// 写法1
void insertSort_0(int arr[], int length)
{
int i, j, key;
for (i = ; i < length; i++){
key = arr[i];
for (j = i - ; j >= ; j--){
if (arr[j] > key) {
arr[j + ] = arr[j];
}
else
break;
}
arr[j + ] = key;
}
} //// 写法2
void insertSort_1(int arr[], int length)
{
int j, key;
for (int i = ; i < length; i++){
key = arr[i];
j = i - ;
while (j >= && arr[j] > key){
arr[j + ] = arr[j];
j--;
}
arr[j + ] = key;
}
} int main()
{
int iArr[] = { , , , , , , , };
int len = sizeof iArr / sizeof(iArr[]); cout << "排序前:";
for (int i = ; i < len; i++) {
cout << iArr[i] << " ";
} cout << "\n排序后:";
insertSort_0(iArr, len);
for (int j = ; j < len; j++) {
cout << iArr[j] << " ";
}
cout << endl; system("pause");
return ;
}
 

C++描述基础算法之直接插入排序的更多相关文章

  1. 【算法】342- JavaScript常用基础算法

    一个算法只是一个把确定的数据结构的输入转化为一个确定的数据结构的输出的function.算法内在的逻辑决定了如何转换. 基础算法 一.排序 1.冒泡排序 //冒泡排序function bubbleSo ...

  2. python_基础算法

    本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序,计数排序.希望大家回顾知识的时候也能从我的这篇文章得到帮助. 概述 十种常见排序算法可以分为两 ...

  3. 基础算法(java版本)

    Practice Author: Dorae Date: 2018年10月11日13:57:44 转载请注明出处 具体代码请移步git 基础算法 图 Prim Kruskal Dijkstra Flo ...

  4. PHP算法之四大基础算法

    前言 虽然工作中,你觉得自己并没有涉及到算法这方面的东西,但是算法是程序的核心,一个程序的好与差,关键是这个程序算法的优劣,所以对于冒泡排序.插入排序.选择排序.快速排序这四种基本算法,我想还是要掌握 ...

  5. Python <算法思想集结>之初窥基础算法

    1. 前言 数据结构和算法是程序的 2 大基础结构,如果说数据是程序的汽油,算法则就是程序的发动机. 什么是数据结构? 指数据在计算机中的存储方式,数据的存储方式会影响到获取数据的便利性. 现实生活中 ...

  6. PHP基础算法

    1.首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用PHP画下,画了一半. 思路:多少行for一次,然后在里面空格和星号for一次. <?php for($i=0;$i<=3;$i++ ...

  7. 10个经典的C语言面试基础算法及代码

    10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...

  8. Java基础算法集50题

    最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准备加强一下算法这块,然后百度了一下java基础算法,看到的都是那50套题,那就花了差不多三个晚自习的时间吧,大体看了一遍,做了其中的27道题,有一些 ...

  9. Java常见排序算法之折半插入排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

随机推荐

  1. 第29题:推断一个序列是否是还有一个push序列的pop序列

    github:https://github.com/frank-cq/MyTest 第29题:输入两个整数序列,当中一个序列表示栈的push顺序,推断还有一个序列有没有可能是相应的pop顺序.为了简单 ...

  2. PowerDesigner自定义列和过滤器

    好多次要增加注释列,默认值列都忘了怎么设置,写下来以备后用:) 选中表,然后右键,选择properties->columns->点击下图中那个不显眼的小图标(Customize Colum ...

  3. java_类承继其他类的内部类例子

    package ming; class Outer { class In { public In(String msg) { System.out.println(msg); } } } public ...

  4. 利用正则表达式作为string.split seprator

    某字符串 var str = "{1,att,7},{2,break,7},{3,crit,7},{4,combo,7},{5,break,7},{6,hit,7}"; 需要分割成 ...

  5. iOS 8 CloudKit上手教程

    CloudKit,是苹果最新推出的基于iCloud的一个云端数据存储服务,提供了低成本的云存储并能作为一个后端服务通过用户们的iCloud账号分享其应用数据. CloudKit主要由两个部分组成: 一 ...

  6. HTTP 缓存策略

    浏览器一般缓存图片.CSS.JS等静态文件,因为这些文件的更新频率相对来说比较低,合理利用浏览器的缓存对网站的性能提升有很大帮助.HTTP缓存分为两部分,分别是本地缓存和缓存协商,当本地缓存不生效时会 ...

  7. Android(java)学习笔记87:File类使用

    package cn.itcast_01; import java.io.File; /* * 我们要想实现IO的操作,就必须知道硬盘上文件的表现形式. * 而Java就提供了一个类File供我们使用 ...

  8. Android(java)学习笔记82:我们到底该如何处理异常?

    我们到底该如何处理异常? 原则: 如果该功能内部可以将问题处理,用try,自己能解决就自己解决问题. 如果处理不了,交由调用者处理,这是用throws,自己不能解决的问题,我们就抛出去交个调用者解决这 ...

  9. CF Theatre Square

    Theatre Square time limit per test 2 seconds memory limit per test 64 megabytes input standard input ...

  10. 【Stirling Number I】

    hdu 4372 Count the Buildings 推荐这位小哥的,我觉得人家说的灰常的好. 注意数据范围,n,f,b均在(0,2000]范围内,而第一斯特林数的数组范围却是s[2000+5][ ...