Wells


私信TA

用户名:3180624024

访问量:9941

签 名:

等  级
排  名 2604
经  验 2138
参赛次数 0
文章发表 7
年  龄 0
在职情况 学生
学  校 渣渣大学
专  业 大数据

  自我简介:

TA的其他文章

解题思路:

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分

50 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

我想说其实不用这么分三种情况吧!
原数组是正序的数组,我们找到插入点的下标,进行赋值,然后把原插入点及后面的每一位数都进行下标后移一位;找到插入点方法是,当原数组里第一个大于或等于该插入数的数值,则这个数的下标就是我们的插入点。(因为原数组是正序数组)
2022-07-30 23:47:38
#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;
}
2022-06-26 12:24:30
还可以优化~~~
2022-05-29 18:15:36
确实润,确实润,真的C
2022-04-18 20:07:44
  • «
  • 1
  • »