博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 插入排序 个人笔记
阅读量:3966 次
发布时间:2019-05-24

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

C++ 插入排序 个人笔记

插入排序原理:

它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,

找到相应位置并插入。插入排序在实现上,通常采用 in-place 排序(即只需用到 O(1)的额外空间

的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供

插入空间。

插入排序的步骤(文字描述)

//以从大到小的排列为例

1: 首先假设第一个元素就是一个数组(已排好序的数组)

2:用已排好序的数组的下一个元素,与已排好序的数组中的元素从后往前比较

3:如果已排好序中的元素大于已排好序的数组的下一个元素,已排好序中的元素移到下一个位置,上一个位置就可以被插入(覆盖)

4:重复步骤 3,直到找到已排序的元素小于或者等于已排好序的数组的下一个元素的位置;

5:将已排好序的数组的下一个元素插入这个位置

已排好序的数组长度加一

重复2-5步骤

插入排序的代码实现

第一个插入排序的版本

#include 
#include
using namespace std;/********************************函数作用: 使用插入排序从小到大排列数据**函数参数: arr - int类型的数组首地址* len - 数组的总元素个数**函数返回值: 无**************************************/void insertSort1(int* arr, int len) { for (int i = 1; i < len; i++) { int tmp = arr[i];//保存i下标中数据; int index = i; //index 需要插入的位置 for (int j = i-1; j >= 0; j--) { if (arr[i] < arr[j]) { index = j; } } //使index 的位置空出来,可以被覆盖 for (int n = i; n > index; n--) { arr[n] = arr[n - 1]; } //用tmp数据覆盖index下标中的数据 if (index != i) { arr[index] = tmp; } }}int main(void) { int arr[] = { 100,2,3,87,80,54,98 }; int len = sizeof(arr) / sizeof(arr[0]); insertSort1(arr,len); for (int i = 0; i < len; i++) { cout << arr[i] << setw(4); } return 0;}

第二个版本

#include 
#include
using namespace std;/********************************函数作用: 使用插入排序从小到大排列数据**函数参数: arr - int类型的数组首地址* len - 数组的总元素个数**函数返回值: 无**************************************/void insertSort2(int* arr, int len) { //从下标为1的(数组第二个元素)开始遍历 for (int i = 1; i < len; i++) { //i是已排序数组的下一个下标 int current = arr[i];//保存当前i下标中的数据 int preindex = i - 1;//已排序的最后一个数组下标 //preindex 不小于零 且 //prieindex 下标中的元素大于已排序数组的下一个下标中的元素 //进入循环 //第一次进入循环时preindex 是已排序的最后一个数组下标依次递减 while (preindex >= 0 && arr[preindex] > arr[i]) { //空出preindex这个下标的位置,preindex 下标中的元素可以被覆盖 arr[preindex + 1] = arr[preindex]; //preindex preindex--; } //这里的preindex下标经过了preindex--;所以加1; //已排序数组的下一个下标中的元素覆盖preindex+1 下标中的元素 arr[preindex + 1] = current; }}int main(void) { int arr[] = { 100,2,3,87,80,54,98 }; int len = sizeof(arr) / sizeof(arr[0]); insertSort2(arr,len); for (int i = 0; i < len; i++) { cout << arr[i] << setw(4); } return 0;}

代码测试

两个版本都可以
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DuL71kkk-1586443030561)(C:\Users\Lenovo\Pictures\QQ截图20200409223256.png)]

转载地址:http://wbyki.baihongyu.com/

你可能感兴趣的文章
DB2 临时表
查看>>
ITERATE、LEAVE、GOTO和RETURN
查看>>
异常处理
查看>>
存储过程
查看>>
动态SQL(Dynamic SQL)
查看>>
在存储过程之间传递数据
查看>>
迁移存储过程
查看>>
GET DIAGNOSTIC 语句
查看>>
Python 简介
查看>>
Python 注释
查看>>
Python 变量
查看>>
Python 数据类型 -- 数字
查看>>
Spring 管理对象
查看>>
Spring 自定义对象初始化及销毁
查看>>
Spring Batch 环境设置
查看>>
字符组转译序列
查看>>
字符转译序列
查看>>
Java 数据类型
查看>>
UTF-16 编码简介
查看>>
Java 变量名
查看>>