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

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. JS案例六_2:省市级联动

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. RN开发第二天

    今天上午配置了windows的Android的环境,下载node,Python,安装Android SDK和Android studio,JSK,然后配置用户变量和系统变量,然后npm install ...

  3. Quartz定时任务封装

    一般的系统都会有一些定时任务,那么我们将这个定时任务封装起来,只要系统需要添加定时任务时,只需调用此方法传入所需要的值即可完成定时任务.  自己自学整理的一些随笔 1.首先对周期粒度进行封装 publ ...

  4. js缓存问题的解决

  5. erlang并发编程

    1.erlang中创建进程(非操作系统线程,比其要轻量很多)非常方便,运用spawn函数即可 spawn(Fun) -> pid() spawn(Node, Fun) -> pid() s ...

  6. Frist one

    2017.11.27 10:20am 今天也许只是普通的一个周一上午 但是我希望在多年以后 在我回望这些年的努力学习中 今天会是最浓墨重彩的一笔 我时常感到焦虑 对未来的焦虑 对感情的焦虑 以至于 我 ...

  7. Vmware网络不可达

    1. ifconfig -a   查看当前的网卡 2. cd  /etc/sysconfig/network-scripts/ 3. 打开对应网卡名称文件, 具体修改内容参考(https://www. ...

  8. Delphi中播放Flash

    在delphi中可以直接打开flash动画,并控制它播放和停止,还可以得到它的总帧数. 具体操作步骤:①Component -> Import ActiveX Contrals -> Sh ...

  9. MYSQL+PHP的学习之路

    MYSQL+PHP 先从MYSQL开始吧 第一步:SQL语句基础 1.书籍 2.网站: 这个网站在线测试和考试http://sqlzoo.net/wiki/SELECT_basics/zh 3.学习过 ...

  10. 自己练习的一个小的demo的时候a标签关于href链接的问题

    一.Js的几种调用方法(参考总结的) 1.a href="javascript:js_method();" 这是常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而且 ...