【排序算法】插入排序法 & C++实现 | [实例过程分析]

简介: 插入排序法 & C++实现

●插入排序法


1.简要介绍

插入排序算法代码段:


for (int i = 1; i < len; i++)
  {
  int t = a[i];
  int j = i - 1;
  while (j >= 0 && t < a[j])
  {
    a[j+1] = a[j];
    j--;
  }
  a[j + 1] = t;
  }

2.图形化演示

随机找5个数用插入排序法进行从小到大排序,如下图所示(每一个红框为一次进行)。


       第一次进行,i=1(标红字体为t=arr[1])、j=0,①while操作不进行,t插入到arr[1]数组位;


       第二次进行,i=2(标红字体为t=arr[2])、j=1,①while操作进行,将arr[1]插入到arr[2]数组位,i=2,j=0,②while操作不进行,t插入到arr[1]数组位;


       第三次进行,i=3(标红字体为t=arr[3])、j=2,①while操作进行,将arr[2]插入到arr[3]数组位,i=3,j=1,②while操作不进行,t插入到arr[2]数组位;


       第四次进行,i=4(标红字体为t=arr[4])、j=3,①while操作进行,将arr[3]插入到arr[4]数组位,


i=4,j=2,②while操作不进行,t插入到arr[3]数组位;


       第五次进行,完成排序;

8a661ae85db33ac069cb677dcf3d1d4f_8a78ab4746bc4fa9a7025f4a66805400.png

bbcf89d75ea03497a0fc6665e80673f9_4c8e91bcc9924e9aad02f31ca095c3e2.png


3.代码如下

#include<iostream>
using namespace std;
#define size 10
class insertionsort {
public:
  void insertionsort_1(int a[],int len);
  void shownumber();
  int arr[size];
};
void insertionsort::insertionsort_1(int a[], int len)
{
  for (int i = 1; i < len; i++)
  {
  int t = a[i];
  int j = i - 1;
  while (j >= 0 && t < a[j])
  {
    a[j+1] = a[j];
    j--;
  }
  a[j + 1] = t;
  //测试代码
  cout << i + 1 << ":" << " ";
  for (int m = 0; m < len; m++)
  {
    cout << a[m] << " ";
  }
  cout << endl;
  }
}
void insertionsort::shownumber()
{
  for (int i = 0; i < size; i++)
  {
  cout << this->arr[i] << " ";
  }
}
void text()
{
  insertionsort is;
  for(int i=0;i<size;i++)
  { 
  cin >> is.arr[i];
  }
  is.insertionsort_1(is.arr, size);
  is.shownumber();
}
int main()
{
  text();
}


4.结果如下

c9119e386c482837711e76db525b9fd8_2b1878214886497c84eb470755a8a4a8.png

目录
相关文章
|
3月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
95 4
|
10天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
24 6
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【11月更文挑战第6天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
103 5
|
3月前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
3月前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【10月更文挑战第8天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
|
3月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
3月前
|
算法
PID算法原理分析及优化
【10月更文挑战第6天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
60 2
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
110 5