八大排序算法之插入排序

1.算法思想:

从当前位置开始,从后往前找比当前数字小的,找到后插入到这个小的数字后面,在找的过程中,如果发现一个比当前数字大,同时将这个数字往后挪

2.举例说明:

2 5 7 9 11 1 3

以上数字中使用插入排序,首先从第1号位置,也就是5开始找比5小的数字,如果发现比这个数字大,将这个数字往后挪,如果比他小,就插入到这个数字后面。本例2比5小,5不动;接着是比较7,跟5同理,不动;接着是9,11,同理,不动;然后是1,11比1大,就将11往后挪,然后9比7大,将9往后挪,依次类推,直到找到比1小,本例1为最小的,直接插入到第一个;拍完后就变成1 2 5 7 9 11 3;然后3同理,排序后就成为1 2 3 5 7 9 11;

代码实现:

cpp 复制代码
void InsertSort(int* arr, int len)//直接插入排序
{
	int tmp,j;
	for (int i = 1; i < len; i++)
	{
		tmp = arr[i];
		for (j = i - 1; j >= 0; j--)
		{
			if (arr[j] > tmp)
			{
				arr[j + 1] = arr[j];
			}
			else
			{
				//arr[j+1] = tmp;
				break;
			}
		}
		arr[j + 1] = tmp;
	}
	
}

特点:

越有序越快,完全有序为O(n);排序稳定

相关推荐
码爸2 小时前
线性回归算法
算法·机器学习·线性回归
Coder-magician3 小时前
《代码随想录》刷题打卡day51:图论-part09(dijistra堆优化,Bellman_ford算法)
算法·图论
Nil2083 小时前
leetcode 763划分字母区间
算法·leetcode·职场和发展
不会就选b3 小时前
算法日常・每日刷题--<动态规划>20
算法·leetcode·动态规划
青少儿编程课堂4 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
不会就选b4 小时前
算法日常・每日刷题--<动态规划>19
算法·leetcode·职场和发展
没有钱的钱仔6 小时前
协方差矩阵含义
算法·机器学习·矩阵
垆边人似月.6 小时前
华为机试题 :和为 K 的子数组个数
算法·leetcode·华为
三*一6 小时前
优化修整算法
前端·javascript·算法