直接插入排序是一种简单的插入排序法,适用于少量数据的排序,是一种较为稳定的排序算法,本文通过插入排序的方法实现对一个数组进行从大到小和从小到大的排序。

1. 从小到大的插入排序:

例如:给定整型数组a[8] = {6,5,3,1,8,7,2,4},排序后得到a[8] = {1,2,3,4,5,6,7,8}

void InsertSort(int arr[], int n)
{
int i,j,key;
for(i = ; i < n; i++)
{
key = arr[i];
j = i - ;
while(j >= && arr[j] > key)
{
arr[j+] = arr[j];
j--;
}
arr[j+] = key;
}
}

2. 从大到小的插入排序:

例如:给定整型数组a[8] = {6,5,3,1,8,7,2,4},排序后得到a[8] = {8,7,6,5,4,3,2,1}

void InverseInsertSort(int arr[], int n)
{
int i,j,key;
for(i = n - ; i >= ; i--)
{
key = arr[i];
j = i + ;
while(j < n && key < arr[j])
{
arr[j-] = arr[j];
j++;
}
arr[j-] = key;
}
}

测试代码:

#include <iostream>
void InsertSort(int arr[], int n);
void printArray(int arr[], int n);
void InverseInsertSort(int arr[], int n);
const int n = ;
int main(int argc, char **argv) {
int a[n] = {,,,,,,,};
std::cout << "从小到大的插入排序:\n";
InsertSort(a,n);
printArray(a,n);
int b[n] = {,,,,,,,};
std::cout << "从大到小的插入排序:\n";
InverseInsertSort(b,n);
printArray(b,n);
return ;
}
void InsertSort(int arr[], int n)
{
int i,j,key;
for(i = ; i < n; i++)
{
key = arr[i];
j = i - ;
while(j >= && arr[j] > key)
{
arr[j+] = arr[j];
j--;
}
arr[j+] = key;
}
}
void InverseInsertSort(int arr[], int n)
{
int i,j,key;
for(i = n - ; i >= ; i--)
{
key = arr[i];
j = i + ;
while(j < n && key < arr[j])
{
arr[j-] = arr[j];
j++;
}
arr[j-] = key;
}
}
void printArray(int arr[], int n)
{
for(int i = ; i < n; i++)
{
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}

输出:

从小到大的插入排序:

从大到小的插入排序:
        

C++插入排序的更多相关文章

  1. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  2. Html5 直接插入排序

    直接插入排序算法(Straight Insertion Sort),是排序算法中简单的一种算法,基本思想如下: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第 ...

  3. python排序之一插入排序

    python排序之一插入排序 首先什么是插入排序,个人理解就是拿队列中的一个元素与其之前的元素一一做比较交根据大小换位置的过程好了我们先来看看代码 首先就是一个无序的列表先打印它好让排序后有对比效果, ...

  4. java基础算法之插入排序

    一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通 ...

  5. [LeetCode] Insertion Sort List 链表插入排序

    Sort a linked list using insertion sort. 链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表中取出来,然后按顺序插入到新链表中,时间复杂度为O(n2) ...

  6. 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)

    如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...

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

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

  8. C语言中的插入排序(2016-12-30)

    直接插入排序: 算法思想:假设待排序的记录存放在数组R[1--n]中,初始时,i=1,R[1]自成一个有序区,无序区为R[2--n].然后从i=2起直到i=n,依次将R[i]插入当前的有序区R[1.. ...

  9. JavaScript算法(冒泡排序、选择排序与插入排序)

    冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...

  10. 基本排序算法——插入排序java实现

    插入排序过程: 在初始状态下,第一个元素是排序的,在最终状态下,作为一组数据时排序的. 代码如下;eclipse4.3实现 package sort.basic; import java.util.A ...

随机推荐

  1. ubuntu14/16 安装python3-opencv3_百度经验

    http://jingyan.baidu.com/article/e4511cf348dac52b845eafc8.html

  2. Visual Studio+VAssistX自动添加注释,函数头注释,文件头注释

    转载:http://blog.csdn.net/xzytl60937234/article/details/70455777 在VAssistX中为C++提供了比较规范注释模板,用这个注释模板为编写的 ...

  3. 前端车牌识别SDK算法提取

    同行业中,别人标配有的产品我有,别人没有的产品我们也有,如此才能增强竞争力,通过优化创新,前端车牌识别SDK功能,性能上,都是行业NO.1的水平.车牌识别sdk这个用于越来越多人集成了,汽车保有量日益 ...

  4. Oracle入门之表结构的管理

    建表的基本语法: create table table_name( field1 datatype, field1 datatype, field1 datatype, ... ) 注:table_n ...

  5. jar包自动化部署---jenkins

    B.Application Server SVN账号:svn://192.168.1.49/svn/keenyoda-trunk/xxxxxcht=xxxxx 安装jenkins:安装目录:/usr/ ...

  6. 机器学习笔记(三)Logistic回归模型

    Logistic回归模型 1. 模型简介: 线性回归往往并不能很好地解决分类问题,所以我们引出Logistic回归算法,算法的输出值或者说预测值一直介于0和1,虽然算法的名字有“回归”二字,但实际上L ...

  7. 《Mem2Seq: Effectively Incorporating Knowledge Bases into End-to-EndTask-Oriented Dialog Systems》

    Multihop Attention Networks (MANs) https://zhuanlan.zhihu.com/p/52067672 https://blog.csdn.net/qq_38 ...

  8. ansible 变量详解

    定义变量的方法 1. 主机变量,在hosts文件中设置变量, [atlanta] host1 http_port= maxRequestsPerChild= host2 http_port= maxR ...

  9. ATL与COM之间的关系、ATL的特点与基本使用方法

    http://blog.csdn.net/titilima/archive/2004/07/18/44273.aspx ATL,Active Template Library活动模板库 是一种微软程序 ...

  10. 将JPA出参Iterable转为List

    Iterable<Entity> geted = entityDao.findAll();  List<Entity> list = Lists.newArrays();  g ...