C++数据结构排序算法之插入类排序(含有完整代码直接插入排序、希尔排序,表插入排序,二路插入排序,折半插入排序)

本文详细介绍了C++中四种插入类排序算法:直接插入排序、折半插入排序、2路插入排序和希尔排序。直接插入排序适合小规模数据,是稳定的排序算法;折半插入排序减少了比较次数,但时间复杂度仍为O(n^2);2路插入排序通过辅助数组减少移动次数,希尔排序通过多趟排序达到平均时间复杂度O(nlogn)。
摘要由CSDN通过智能技术生成

排序

基本概念

排序的目的就是为了让查找效率变得更高。

排序算法的稳定性

指的是关键字相同的元素之间在排序完成后相对位置不发生改变。
1)不稳定算法
2)有些算法可以稳定,但通过微调代码也可以不稳定。

内部排序

在排序过程中,待排序的数据全部被载入在内存中;

外部排序

由于数据过多,导致待排序的数据只能部分载入在内存中,在排序过程中会有内存和磁盘之间的数据交换;(减少磁盘的读写次数)

两种基本操作:

比较、移动。

直接插入类排序

算法思想:

每次将一个记录按照其关键字的大小插入到已经排好的序列中,直至全部记录插入完毕。
例如:

int arr[]={
   16,1,45,23,99,2,18,67,42,10};---{
   1,16,....}---{
   1,16,45,....}
---{
   1,16,23,45,.....}---{
   1,16,23,45,99}---{
   1,2,16,23,45,99}
---{
   1,2,16,18,23,45,99,....}---{
   1,2,16,18,23,42,45,99,...}
---{
   1,2,10,16,18,23,45,67,99}---{
   1,2,10,16,18,23,42,45,67,99}
空间复杂度: O ( 1 ) O(1) O(1)
时间复杂度:最好情况: O ( n ) O(n) O(n),最坏情况: O ( n 2 ) O(n^2) O(n2),平均复杂度: O ( n 2 ) O(n^2) O(n2)
是一种稳定排序算法
适合待排序数量比较少

实现代码:

#include<iostream>
using namespace std;
//直接插入排序
template <typename T>//T代表数组元素类型
void InsertSort(T myarray[], int length)
{
   
	if (length <= 1)
	{
   
		return;
	}
	for (int i = 1; i < length; i++)//从第二个元素开始比较
	{
   
		if (myarray[i] < myarray[i - 1])
		{
   
			T temp = myarray[i];//暂存myarray[i],防止后续移动元素时值被覆盖掉
			int j;
			for (j = i - 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值