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

算法设计-插入排序(C++)

一、算法原理

插入排序是一种简单直观的排序算法,它的工作原理是将未排序数据插入到已排序序列的合适位置。具体来说,插入排序将数组分为已排序和未排序两部分,初始时已排序部分只有数组的第一个元素,然后依次从未排序部分取出元素,将其插入到已排序部分的合适位置,直到整个数组都被排序。

二、详细代码

#include<iostream>
using namespace std;

int InsertSort(int arr[], int size)
{
	
	int x, i;
	for( int j = 1; j < size; j++)
	{
		x = arr[j];
		i = j - 1;
		while( i >= 0 && x < arr[i])
		{
			arr[i+1] = arr[i];
			i = i - 1;
		}
		arr[i+1] = x;
	}
	for(int s = 0; s < size; s++)
	{
		
		cout<<arr[s]; 
	}
	cout<<endl;
}


int main()
{
	int size;
	std::cout<<"Enter size:";
	std::cin>>size;
	int* arr =new int[size];

	for(int i = 0;i<size;i++)
	{
		cout<<"arr element:";
		cin>>arr[i]; 
	}
InsertSort(arr,size);
delete[] arr;
return 0;

}

三、详细解释

  • 排序过程

    1. 外层循环for( int j = 1; j < size; j++),从数组的第二个元素开始(索引为 1),依次将未排序部分的元素插入到已排序部分。
    2. 保存当前元素x = arr[j];,将当前要插入的元素保存到变量 x 中。
    3. 内层循环while( i >= 0 && x < arr[i]),从已排序部分的最后一个元素开始,向前比较,如果当前元素 x 小于已排序部分的元素 arr[i],则将 arr[i] 向后移动一位,即 arr[i+1] = arr[i];,并将 i 减 1。
    4. 插入元素:当找到合适的位置后,将当前元素 x 插入到该位置,即 arr[i+1] = x;
  • 输出排序结果

    • 使用 for 循环遍历数组,并使用 cout 输出每个元素,最后换行。

复杂度分析

  • 时间复杂度:插入排序的平均时间复杂度和最坏时间复杂度都是O(n2) ,其中n 是数组的大小。在最好情况下,即数组已经有序时,时间复杂度为O(n) 。
  • 空间复杂度:插入排序只需要常数级的额外空间,因此空间复杂度为 O(1)。

http://www.kler.cn/a/524753.html

相关文章:

  • 17、Spring MVC 框架:构建强大的 Java Web 应用程序
  • 【面试】【前端】SSR与SPA的优缺点
  • RocketMQ 中如何实现消息的可靠传递?
  • C# dataGridView1获取选中行的名字
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
  • LangChain的开发流程
  • 幸运数字——蓝桥杯
  • 慕课:若鱼1919的视频课程:Java秒杀系统方案优化 高性能高并发实战,启动文档
  • 完美世界前端面试题及参考答案
  • CSS(快速入门)
  • 【Java基础-42】Java中的包装类与基本数据类型:深入理解它们的区别与应用场景
  • 【STL笔记】字符串
  • 免杀国内主流杀软的恶意样本分析
  • C++:多继承习题4
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
  • Windows 程序设计6:错误码的查看
  • 实验十 数据库完整性实验
  • World Creator地形导入UE
  • 如何在gitee/github上面搭建obsidian的图床
  • Synology 群辉NAS安装(8)安装jira前的用户和组的准备
  • 【使用Apache Flink 实现滑动窗口流式计算】
  • 灰色预测模型
  • 实现前端当中的页面过渡动画
  • 如何监控公司网络与 WorkWin 软件应用解析:办公效能提升路径探究
  • BASE基本理论你了解吗?
  • Java Web 开发基础介绍