当前位置: 首页 > news >正文

插入排序(Insertion Sort)

C++自学精简教程 目录(必读)

插入排序

每次选择未排序子数组中的第一个元素,从后往前,插入放到已排序子数组中,保持子数组有序。

打扑克牌,起牌。

输入数据

42 20 17 13 28 14 23 15

执行过程

完整代码

#include <iostream>
#include <cassert>
#include <vector>
using namespace std;void print_array(const char* msg, int* arr, int n)
{cout << msg << " ";for (int i = 0; i < n; i++){cout << arr[i] << " ";}cout << endl;
}
//swap two number
void Swap(int& a, int& b)
{int tmp = a; a = b; b = tmp;
}//将newValue插入到子数组arr中,arr的长度为length
void Insert(int* arr, int newValueindex, int newValue)
{// newValueindex=1     {arr[0]}    <== arr[1]           // newValueindex=2     {arr[0], arr[1]}    <== arr[2]// ......// newValueindex=n-1   {arr[0], arr[1],... arr[n-2]}    <== arr[n-1]// [a,   b,   c,   d]    e//  0              j     length   int j = newValueindex - 1;for (; j >= 0; j--){if (arr[j] > newValue){//move arr[j] to the next position,for newVaulearr[j + 1] = arr[j];}else{break;//break 发生时, j 的值可能是 0}}//发生了移动,j会停止在最后一个需要被移动的位置的前面一个位置if (j != newValueindex - 1){arr[j+1] = newValue;}
}void InsertSort(int* arr, int n)
{if (n <= 1){return;}//将下标为1的元素插入到{arr[0]}中//将下标为2的元素插入到{arr[0], arr[1]}中//......//将下标为n-1的元素插入到{arr[0], arr[1], arr[n-2]}中for (int i = 1; i < n; i++) {//将未排序序列中的第一个元素插入到已排序的序列中Insert(arr, i, arr[i]);//insert first element in unsorted list to the sorted listprint_array("one trip", arr, n);}
}void test(vector<int> arr)
{//输出原始序列print_array("original array:", arr.data(), arr.size());//执行排序,并输出排序过程InsertSort(arr.data(), arr.size());//输出排序后的列表print_array("after sorted:",arr.data(), arr.size());cout << endl;
}int main()
{test({ 1 });test({ 1 , 2 });test({ 2 , 1 });test( { 2 , 2 });test({ 42, 20, 17, 13, 28, 14, 23, 15 });test({ 1, 8, 3, 6, 5, 4, 7, 2 , 9 });test( { 8, 8, 6, 6, 7, 5, 5, 7, 9 , 9});return 0;
}

执行结果

original array: 1
after sorted: 1original array: 1 2
one trip 1 2
after sorted: 1 2original array: 2 1
one trip 1 2
after sorted: 1 2original array: 2 2
one trip 2 2
after sorted: 2 2original array: 42 20 17 13 28 14 23 15
one trip 20 42 17 13 28 14 23 15
one trip 17 20 42 13 28 14 23 15
one trip 13 17 20 42 28 14 23 15
one trip 13 17 20 28 42 14 23 15
one trip 13 14 17 20 28 42 23 15
one trip 13 14 17 20 23 28 42 15
one trip 13 14 15 17 20 23 28 42
after sorted: 13 14 15 17 20 23 28 42original array: 1 8 3 6 5 4 7 2 9
one trip 1 8 3 6 5 4 7 2 9
one trip 1 3 8 6 5 4 7 2 9
one trip 1 3 6 8 5 4 7 2 9
one trip 1 3 5 6 8 4 7 2 9
one trip 1 3 4 5 6 8 7 2 9
one trip 1 3 4 5 6 7 8 2 9
one trip 1 2 3 4 5 6 7 8 9
one trip 1 2 3 4 5 6 7 8 9
after sorted: 1 2 3 4 5 6 7 8 9original array: 8 8 6 6 7 5 5 7 9 9
one trip 8 8 6 6 7 5 5 7 9 9
one trip 6 8 8 6 7 5 5 7 9 9
one trip 6 6 8 8 7 5 5 7 9 9
one trip 6 6 7 8 8 5 5 7 9 9
one trip 5 6 6 7 8 8 5 7 9 9
one trip 5 5 6 6 7 8 8 7 9 9
one trip 5 5 6 6 7 7 8 8 9 9
one trip 5 5 6 6 7 7 8 8 9 9
one trip 5 5 6 6 7 7 8 8 9 9
after sorted: 5 5 6 6 7 7 8 8 9 9
http://www.lryc.cn/news/153552.html

相关文章:

  • 2023蓝帽杯初赛
  • 风险评估
  • 直播软件app开发中的AI应用及前景展望
  • vscode html使用less和快速获取标签less结构
  • excel中的引用与查找函数篇1
  • 【python】—— 函数详解
  • springboot web开发登录拦截器
  • 大数据课程K17——Spark的协同过滤法
  • 【力扣】1588. 所有奇数长度子数组的和 <前缀和>
  • socket,tcp,http三者之间的原理和区别
  • 【FPGA零基础学习之旅#11】数码管动态扫描
  • JavaExcel:自动生成数据表并插入数据
  • 哪吒汽车“三头六臂”之「浩智电驱」
  • 补码的反码加1为什么是原码?
  • 光刻机是怎么做出来的
  • CocosCreator3.8研究笔记(二)windows环境 VS Code 编辑器的配置
  • Rust--流程控制
  • mate60的麒麟9000s和麒麟9000是一款CPU吗
  • 查漏补缺 - JS三 WebAPI
  • 如何熟练使用vector?
  • gitlab-rake gitlab:backup:create 执行报错 Errno::ENOSPC: No space left on device
  • 【Nginx】负载均衡当其中一台服务器宕机之后
  • 每日一题 2511. 最多可以摧毁的敌人城堡数目
  • NLP(六十七)BERT模型训练后动态量化(PTDQ)
  • 机器学习和数据挖掘04-PowerTransformer与 MinMaxScaler
  • 1.15 自实现GetProcAddress
  • 总结ADX指标交易的好处
  • ConsoleApplication815项目(直接加载+VEH Hook Load)
  • 事务(SQL)
  • 原型,原型链,继承(圣杯模式)