十大经典排序,插入排序详解和举例,看一遍就懂,C++版

十大经典排序,插入排序详解和举例,看一遍就懂,C++版

插入排序算法基本思想

将待排元素逐一插到有序序列中,保持序列有序,从而使有序序列的长度不断增加。过程类似于,我们打扑克时,排牌的过程

算法动画演示

十大经典排序,插入排序详解和举例,看一遍就懂,C++版

插入排序

算法举例

待排序列:

数值:6,5,3,1,8,7,2,4

下标:0 1 2 3 4 5 6 7

0--0 有序:6 5 3 1 8 7 2 4

0--1 有序:5 6 3 1 8 7 2 4

0--2 有序:3 5 6 1 8 7 2 4

0--3 有序:1 3 5 6 8 7 2 4

0--4 有序:1 3 5 6 8 7 2 4

0--5 有序:1 3 5 6 7 8 2 4

0--6 有序:1 2 3 5 6 7 8 4

0--7 有序:1 2 3 4 5 6 7 8

算法代码

#include
#include
using namespace std;

//升序
void insertSort(vector& arr)
{
	//数组元素个数
	int len = arr.size();
	//元素个数小于2,直接return
	if (len < 2) return;
	//0--0有序,不需要任何操作
	//0--1有序....
	for (int i = 1; i < len; i++)
	{
		for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--)
		{
			swap(arr[j], arr[j + 1]);
		}
	}
}

//降序
void insertSortDown(vector& arr)
{
	//数组元素个数
	int len = arr.size();
	//元素个数小于2,直接return
	if (len < 2) return;
	//0--0有序,不需要任何操作
	//0--1有序....
	for (int i = 1; i < len; i++)
	{
		for (int j = i - 1; j >= 0 && arr[j] < arr[j + 1]; j--)
		{
			swap(arr[j], arr[j + 1]);
		}
	}

}

int main()
{
	vector arr = { 6,5,3,1,8,7,2,4 };
	//升序
	insertSort(arr);
	for (int i = 0; i < arr.size(); i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
	//降序
	insertSortDown(arr);
	for (int i = 0; i < arr.size(); i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
	return 0;
}

运行结果:


十大经典排序,插入排序详解和举例,看一遍就懂,C++版

算法特性

时间复杂度:O(N*N)

空间复杂度:O(1)

稳定性:稳定

十大经典排序,插入排序详解和举例,看一遍就懂,C++版

展开阅读全文

页面更新:2024-04-25

标签:升序   下标   复杂度   数组   序列   算法   详解   个数   元素   过程   降序

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top