插入排序相关

时间复杂度:最好O(n)         最坏O(n²)         平均O(n²)

空间复杂度:O(1)

稳定性:稳定

核心思想:

核心思想:,分成两部分,一部分有序,一部分无序,将无序元素依次插入到有序的里面

如果插入里面没有交换操作,要走n-1趟

1.标记有序的右边界,无序的左边界

2.循环将无序插入到有序

2.1保存当前的无序元素

2.2倒序遍历有序数组,进行比较比有序大就放在有序的后面,比有序小就有序最后一个后移,无序的继续向前比较

实现:

void insertSort(vector<int>& arr) {
	for (int i = 1; i < arr.size(); i++) 
	{
		int j = i - 1;//有序的最后一个元素坐标
		int temp = arr[i];//无序的第一个元素,也是即将插入的值
		while (j>=0&&temp<arr[j])
		{
			//插入的无序元素比当前有序元素小
			//说明一定会插入在该有序元素前面那么就将有序元素后移
			arr[j + 1] = arr[j];
			//查看前面的元素和插入值的大小关系
			j--;
		}
		//比有序的大就插入在他的后面,
		//或者走到-1了说明他比所有有序元素都小就将无序元素放在头部
		arr[j + 1] = temp;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值