【排序算法】插入排序法 & 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

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
87 4
|
3月前
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
58 2
|
20天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
49 1
|
1月前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【11月更文挑战第6天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
|
2月前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
2月前
|
存储 算法 搜索推荐
对二叉堆的简单分析,c和c++的简单实现
这篇文章提供了对二叉堆数据结构的简单分析,并展示了如何在C和C++中实现最小堆,包括初始化、插入元素、删除最小元素和打印堆的函数,以及一个示例程序来演示这些操作。
41 19
|
2月前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【10月更文挑战第8天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
|
2月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
3月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
68 4
|
3月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
59 1