C++插入排序
直接插入排序是一种简单的插入排序法,适用于少量数据的排序,是一种较为稳定的排序算法,本文通过插入排序的方法实现对一个数组进行从大到小和从小到大的排序。
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++插入排序的更多相关文章
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- Html5 直接插入排序
直接插入排序算法(Straight Insertion Sort),是排序算法中简单的一种算法,基本思想如下: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第 ...
- python排序之一插入排序
python排序之一插入排序 首先什么是插入排序,个人理解就是拿队列中的一个元素与其之前的元素一一做比较交根据大小换位置的过程好了我们先来看看代码 首先就是一个无序的列表先打印它好让排序后有对比效果, ...
- java基础算法之插入排序
一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通 ...
- [LeetCode] Insertion Sort List 链表插入排序
Sort a linked list using insertion sort. 链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表中取出来,然后按顺序插入到新链表中,时间复杂度为O(n2) ...
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...
- 经典排序算法 – 插入排序Insertion sort
经典排序算法 – 插入排序Insertion sort 插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种, ...
- C语言中的插入排序(2016-12-30)
直接插入排序: 算法思想:假设待排序的记录存放在数组R[1--n]中,初始时,i=1,R[1]自成一个有序区,无序区为R[2--n].然后从i=2起直到i=n,依次将R[i]插入当前的有序区R[1.. ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- 基本排序算法——插入排序java实现
插入排序过程: 在初始状态下,第一个元素是排序的,在最终状态下,作为一组数据时排序的. 代码如下;eclipse4.3实现 package sort.basic; import java.util.A ...
随机推荐
- 记录pycharm快捷键出错的其中一个原因
#pycharm使用小技巧 最近在使用pycharm,所遇到的一些快捷键失效的问题.如ctrl+c,ctrl+v等:包括键入时,总是需要用“i”来实现等问题. 究其缘故,是在安装pycharm时, ...
- 14. Longest Common Prefix ★
题目内容:Write a function to find the longest common prefix string amongst an array of strings 题目分析:本题目利 ...
- canvas初体验
利用画布,绘制随机大小,颜色,位置 方框<!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- redi应用-延时队列
有mq和Kafka,,一般用不上,,两个线程 ..基于Redis 的 list(列表),使用rpush/lpush操作入队列,使用lpop 和 rpop来出队列.
- Spring跟mybatis结合
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- 实训任务02:Hadoop基础操作
实训任务02:Hadoop基础操作 班级 学号 姓名 实训1:创建测试文件上传HDFS,并显示内容 需求说明: 在本地计算机上创建测试文件helloH ...
- Python收发邮件
发送邮件使用SMTP协议,接受POP3或IMAP: 创建邮件内容email模块,发送邮件smtplib模块.发送邮件比较简单,只需先创建SMTP对象,登录服务器后根据发收邮箱地址发送即可: POP3接 ...
- 七月在线爬虫班学习笔记(二)——Python基本语法及面向对象
第二课主要内容如下: 代码格式 基本语法 关键字 循环判断 函数 容器 面向对象 文件读写 多线程 错误处理 代码格式 syntax基本语法 a = 1234 print(a) a = 'abcd' ...
- change事件同一文件多次选中
最近在做图片上传的时候,碰到了一点问题,那就是选择内容相同,change事件执行不了 网上搜索了答案,使用off('change')好像也不行 最终找到一种解决办法 使用replaceWith重置in ...
- jquery tmpl生成导航
引入<script src="jquery.tmpl.min.js"></script> html<ul class="nav" ...