排序--3--C++--插入排序

排序--3--C++--插入排序


        插入排序的其中一种-----直接插入排。时间复杂度为O(n^2),空间复杂度为O(1).是一种稳定的排序方法。

        直接插入排序的规则为(来自百度):每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。

比如有数据:3,6,2,8,5;

1.首先将数据3当成一个有序数组,然后将6插入有序数组{ 3 }中,结果{ 3,6 };

2.然后将数据2插入有序数组{ 3, 6 }中,即{ 2 ,3,6 };

3.然后将数据8插入有序数组{ 2,3 ,6 }中,即{ 2,3,6,8 };

4.然后将数据5插入有序数组{ 2,3,6,8 }中,即{ 2,3,5,6,8 }.

观察上述例题,总结方法,然后将算法总结出来。

插入排序示意图:

代码如下:实现的时候,i代表总共循环插入size次,每一次插入的时候,都是将第i个数据与前面的所有比较,所以从i+1开始循环到0下标,然后找到位置插入有序队列中。

#include <string>
#include <iostream>
using namespace std;
//插入排序
void charu_sort(vector<int>& vector1, int size)
{
	for (int i = 0; i < size - 1; i++)
	{
		for (int j = i+1; j > 0; j--)
		{
			if (vector1[j-1] > vector1[j])
			{
				swap(vector1[j] , vector1[j - 1]);
			}
		}
	}
}
int main()
{
	
	vector<int> vector1;
	int num;
	int size = 5;
	for (int i = 0; i < size;i++)
	{    cin  >> num;
		vector1.push_back(num);
	}
	charu_sort(vector1, size);
	for (int i = 0; i < size;i++)
	{
		cout << vector1[i] << " ";
	}
	cout << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41103495/article/details/108836731
今日推荐