谭浩强C++课后习题17——有序数组插入数据

谭浩强C++课后习题17——有序数组插入数据

题目描述:有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。

算法思路:这里先写了一个排序函数对数组进行从小到大的排序,该函数使用冒泡排序。
冒泡排序:将两个相邻的数进行比较,把较小的调到前面去。如果有5个数,第一次比较第1个数和第2个数,把较小的放前面,再将第2个数和第3个数比较,以此类推,第一轮即可“沉底”最大的一个数,再开始第二轮,按照之前的方法继续进行到第4个数为止。一共“沉底”4次,确定了4个数的位置,则最后一个数的位置也确定了,因此n个数应进行n-1轮。
插入数据:
(1)如果插入的数比数组最后一个数还大,则直接将插入数放在数组尾;
(2)如果插入的数比最后一个数小:先循环数组,找到第一个比插入数大的数,则该位置就是插入位置,用break跳出循环。找到插入位置后,要把插入位置及其之后的数都向后移动一个单位,如果从前开始移动,则前面的数会覆盖掉后面的数,因此应该从最后一个数开始,从后往前循环移动,最后令插入位置的数等于插入数。

#include<iostream>
using namespace std;
void sort(int num[], int n) {
	int temp;
	for (int i = 0;i < n - 1;i++) {
		for (int j = 0;j < n - i - 1;j++) {
			if (num[j] > num[j + 1]) {
				temp = num[j];
				num[j] = num[j + 1];
				num[j + 1] = temp;
			}
		}
	}
}
int main() {
	int n;
	cout << "输入元素个数:";
	cin >> n;
	int* num = new int[n + 1];
	cout << "输入元素:";
	for (int i = 0;i < n;i++)
		cin >> num[i];
	sort(num, n);
	int insertNum;
	cout << "输入插入数据:";
	cin >> insertNum;
	if (insertNum > num[n - 1])
		num[n] = insertNum;
	else {
		int inserti = 0;
		for(int j=0;j<n;j++)
			if (num[j] > insertNum) {
				inserti = j;
				break;
			}
		for (int j = n - 1;j >= inserti;j--)
			num[j + 1] = num[j];
		num[inserti] = insertNum;
	}
	cout << "新数组:";
	for (int i = 0;i < n + 1;i++)
		cout << num[i] << " ";
	return 0;
}

运行测试结果:
在这里插入图片描述

发布了35 篇原创文章 · 获赞 35 · 访问量 602

猜你喜欢

转载自blog.csdn.net/weixin_45295612/article/details/105242050
今日推荐