十大排序--插入排序

插入排序是一种简单的排序算法,它通过将每个元素与已排序部分的元素依次比较并插入到正确位置来构建有序序列。该算法是稳定的,时间复杂度为O(n^2),空间复杂度为O(1)。提供的C++代码展示了插入排序的实现过程。
摘要由CSDN通过智能技术生成

        插入排序(Insertion Sort)的基本操作是将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录加1的有序表。插入排序是稳定的。

        认定第一个元素为有序序列,后面的元素为未排序序列,取出第一个未排序序列元素,与有序序列的最后一个元素比较,即和有序序列的最大元素相比,如果比这个元素大,则直接插入在其后边,否则一直向前面的元素比较,直到找到合适的位置。后边的元素不断重复此步骤,直到所有元素排序完成。如果遇到与新插入元素相等的元素,则把插入元素放在相等元素的后面。

时间复杂度:O(n^2)        空间复杂度:O(1)

代码实现:

#include<iostream>
#include<vector>
//插入排序
using namespace std;
void InsertionSort(vector<int>& v, int len) {
	for (int i = 1; i < len; i++) {//i为下标,从第二个元素开始
		int temp = v[i];//定义一个哨兵,临时变量保存待排序元素
		int j = i - 1;//j为i的前一个元素下标
		while (j >= 0 && v[j] > temp) //当此元素还在容器内,且前面元素大于此元素temp
		{
			v[j+1] = v[j];
			v[j] = temp;
			j--;//不断向前比较
		}

	}
}
//遍历
void PrintVector(vector<int>&v) {
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";

	}
	cout << endl;
}

int main() {
	vector<int> v = { 5,0,3,4,6,1,9,7,8 ,2};
	InsertionSort(v, v.size());
	PrintVector(v);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值