有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

 

分析,有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。可以参考快速排序的思想,把插入的数当为基准数,大于这个基准数的放一边,小于这个基准数的放一边

n = input("请输入一个数:")
str = [4, 9, 11, 12, 15, 22, 23, 34, 52, 78]
def insert_sort(n,str):
    if n.isdigit():
        baseValue = int(n)
        less, greater, equal = [], [], [baseValue]
        for i in range(len(str)):
            if int(str[i]) > baseValue:
                greater.append(str[i])
            elif int(str[i]) < baseValue:
                less.append(str[i])
            else:
                equal.append(str[i])
        return less + equal + greater
    else:
        return "你输入不是数字!"
print(insert_sort(n,str))

 

当您说“按照原来的规律插入,这可能意味着您希望保持数组的有性。对于一个已排的整数组(例如升排列),如果要插入一个新的元素,通常需要比较新元素的值与数组中的有元素,然后决定插入的位置,使得插入后的数组仍然保持有。 这里是一个简单的算法步骤: 1. **初始化**:找到数组末尾的位置 `n`。 2. **比较**:检查新 `x` 是否小于等于当前数组中的最后一个元素 `arr[n]`。 - 如果 `x <= arr[n]`,则直接在 `n+1` 位置插入,因为新不会破坏有的顺。 - 否则,从后向前遍历数组,直到找到第一个大于 `x` 的元素或到达数组开始(即找到正确的位置 `i`)。 - 当 `arr[i-1] < x <= arr[i]` 时,`i` 是插入位置。 3. **插入**:将新 `x` 放到位置 `i`,并将 `arr[i], arr[i+1], ..., arr[n]` 依次后移一位。 下面是这个过程的伪代码实: ```c void insert_sorted(int* arr, int n, int x) { if (n == 0 || x <= arr[n]) { // 新比最大或不存在的大,直接加到最后 arr[n+1] = x; } else { for (int i = n; i > 0 && arr[i-1] > x; --i) { // 从后往前找插入点 arr[i] = arr[i-1]; } arr[i] = x; // 插入 } } ``` 使用这段代码后,您可以根据您的具体需求调用 `insert_sorted` 函并传入已排数组数组长度以及要插入的新。请注意,这个方法假设数组是动态的,可以在原地进行操作,若数组为固定大小,请先检查是否有足够的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值