当前位置:   article > 正文

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

数据结构插入排序c++代码

排序

基本概念

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

排序算法的稳定性

指的是关键字相同的元素之间在排序完成后相对位置不发生改变。
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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
空间复杂度: 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 - 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号