C++实现直接插入排序算法

数据以一维数组的方式顺序存放,使用直接插入排序算法将输入的数据按升序方式重新排列, 不能使用其它函数来实现功能(这里的函数是指标准库或其它库带的排序算法函数)

算法描述:

每次将一个待排序的数据按照大小插入到前面已经排好序的适当位置,直到全部数据插入完成为止。

输入格式 :

第一行为待排序数据序列的个数

第二行为第一个待排序的数据序列,其中第一个数据为数列数据个数,后面依次为数列的数据第三行为第二个待排序的数据序列

输入数据 :

2

6 36 25 28 16 20 22

6 21 15 20 16 19 11

输出格式 :

输出每个数列排序的第一次、第二次、最后一次排序数据

输出数据 :

25 36 28 16 20 22

25 28 36 16 20 22

16 20 22 25 28 36

15 21 20 16 19 11

15 20 21 16 19 11

11 15 16 19 20 21

实现代码如下:

#include<iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
	int r;
	//读取数据序列个数
	cin >> r;

	vector<vector<int>> all_inputs;
	for (int i = 0; i < r; i++) {
		int n;
		//读取数据序列数据数
		cin >> n;
		vector<int> arr(n);
		for (int j = 0; j < n; j++) {
			cin >> arr[j];
		}
		all_inputs.push_back(arr);
	}

	vector<vector<string>> all_outputs;
	for (const auto& input : all_inputs) {
		vector<int> arr = input;
		vector<string> outputs;

		for (int j = 1; j < arr.size(); j++) {
			int key = arr[j];
			int k = j - 1;
			while (k >= 0 && arr[k] > key) {
				arr[k + 1] = arr[k];
				k--;
			}
			arr[k + 1] = key;

			// 收集第一次、第二次和最后一次排序结果
			if (j == 1 || j == 2 || j == arr.size() - 1) {
				string line;
				for (int m = 0; m < arr.size(); m++) {
					line += to_string(arr[m]) + (m == arr.size() - 1 ? "" : " ");
				}
				outputs.push_back(line);
			}
		}

		all_outputs.push_back(outputs);
	}


	// 输出所有结果
	for (const auto& outputs : all_outputs) {
		for (const string line : outputs) {
			cout << line << endl;
		}
	}

	return 0;
}

posted @ 2025-06-02 23:35  相遇就是有缘  阅读(64)  评论(0)    收藏  举报