原题链接:[编程入门]数组插入处理
解题思路:
1、当n > a[8]时
将n存储在a[9]中
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | 7 | 8 | 17 | 23 | 24 | 59 | 62 | 101 | n |
if (n >= a[8]) a[9] = n;
2、当n < a[0]时
将n存储在a[0]中,原有排序依次向后移一位
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| n | 1 | 7 | 8 | 17 | 23 | 24 | 59 | 62 | 101 |
else if (n = 1; i--)
{
a[i] = a[i - 1];
}
a[0] = n; //将n存储在a[0]中
}3、当a[0] < n < a[8]时,需将n插入到第i+1个位置中
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | 7 | 8 | 17 | n | 23 | 24 | 59 | 62 | 101 |
else if (n > a[0] && n <= a[8])
{
for (i = 0; i a[i] && n i; j--)
{
a[j] = a[j - 1]; //插入n,n后的数往后移一格;
}
a[i + 1] = n; //将n存储在a[i+1]中
}
}
}
参考代码:
#includeint main(void)
{
int a[10];
int i;
int n;
for (i = 0; i < 9; i++)
{
scanf("%d", &a[i]); //将9个数存入数组a中
}
scanf("%d", &n); //输入要插入的数
if (n >= a[8])
a[9] = n; //情况1
else if (n = 1; i--)
{
a[i] = a[i - 1];
}
a[0] = n;
}
else if (n > a[0] && n <= a[8]) //情况3
{
for (i = 0; i a[i] && n i; j--)
{
a[j] = a[j - 1];
}
a[i + 1] = n;
}
}
}
for (i = 0; i <= 9; i++)
{
printf("%d\n", a[i]);
}
return 0;
}//还可使用二分法找到需要插入的位置,可有效提高时间复杂度
//不过后面没有将target插入到数组当中
#include<iostream>
#include<vector>
using namespace std;
int searchInsert(vector<int>& nums, int target) {
int start = 0;
int end = nums.size() - 1;
int mid;
if (target < nums[0]) {
return 0;
}
else if (target > nums[end]) {
return end + 1;
}
else {
while (start <= end) {
mid = (start + end) >> 1 - 1;
if (nums[mid] > target) {
end = mid - 1;
}
else if (nums[mid] < target) {
start = mid + 1;
}
if (nums[mid] == target) {
return mid;
}
}
return mid + 1;
}
}
int main(){
vector<int>nums;
int target;
int n;
for (int i = 0; i < 9; i++) {
cin >> n;
nums.push_back(n);
}
cin >> target;
int index = searchInsert(nums, target);
for (int i = 0; i < index; i++) {
cout << nums[i] << endl;
}
cout << target << endl;
for (int i = index; i < 9; i++) {
cout << nums[i] << endl;
}
return 0;
}0.0分
34 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include<stdio.h> //#pragma warning(disable:4996); int main() { int a[12], b; scanf("%d %d %d %d %d %d %d %d %d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &a[9]); scanf("%d", &b); for (int i = 1;i <= 9;i++) { printf("%d\n", a[i]);//当未满足插入条件时依次输出值 if (b >= a[i] && b < a[i + 1])//当满足插入的条件时 { printf("%d\n", b);//输出插入的值 for (int j = i + 1;j <= 9;j++)//从i+1开始,将插入位置后面的数据输出 { printf("%d\n", a[j]); } return 0;//结束 } } return 0; }