向一个有序数组加入一个数,增加后数组仍然有序

本文介绍了一个简单的Java程序,演示如何在已排序的整数数组中插入一个新的元素,并保持数组的有序状态。通过使用二分查找确定插入位置,再进行元素位移来实现。此方法适用于需要维护有序数组的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

o为原数组

n为新数组

s为加入的数


public static void main(String[] args) {

int[] o={1,3,3,5,6,9}; //定义原数列
int[] n=new int[o.length+1];//定义新数组
int s=10; //定义要插入的数
System.out.println(Arrays.toString(o));
System.out.println(Arrays.toString(n));
charushuju(o,s,n);
System.out.println(Arrays.toString(o));
System.out.println(Arrays.toString(n));
}
public static void charushuju(int[] o,int s,int[] n){
int index=Arrays.binarySearch(o, s);
System.out.println("index="+index);
if(index<0){
index=-index-1;
}
int max=o.length;
while(index<max){
n[max]=o[--max];
}
n[index]=s;
int min=0;
while(min<index){
n[min]=o[min];
min++;
}

}
在 C 语言中,如果需要向一个已排序的数组中插入一个新的元素,并保持数组依然有序,可以按照以下步骤操作: ### 实现思路 1. **遍历查找位置**:从头到尾遍历数组,找到第一个比新元素大的值的位置 `pos`,这就是新元素应该插入的地方。 2. **移动据**:将从 `pos` 开始的所有元素往后移一位,腾出空间给新元素。 3. **插入元素**:把新元素放到空出来的位置。 假设我们有一个升序排列的整型数组 `arr` 和它的当前大小 `size`,现在我们需要插入一个值 `value` 并保证数组仍为升序。 ```c #include <stdio.h> #define MAX_SIZE 100 // 假设最大长度 void insert_sorted(int arr[], int *size, int value) { if (*size == MAX_SIZE){ printf("数组已满无法添加\n"); return; } int i = *size - 1; // 从最后一个有效元素开始往前比较 while (i >= 0 && arr[i] > value){ // 找到合适的位置并后移较大字 arr[i + 1] = arr[i]; --i; } arr[i + 1] = value; // 插入目标值 ++(*size); // 更新数组大小 } // 测试程序 int main() { int sortedArr[MAX_SIZE] = {1, 3, 5, 7}; int size = 4; insert_sorted(sortedArr, &size, 6); for (int j=0; j<size; ++j) printf("%d ",sortedArr[j]); return 0; } ``` 上述代码示例了如何往一个初始含有 `{1, 3, 5, 7}` 的数组中插入 `6` 后得到新的有序数组 `{1, 3, 5, 6, 7}`。 #### 注意事项: - 数组容量有限制,在尝试插入前需检查是否还有足够空间; - 如果要支持降序等其他排序规则,则相应调整条件判断部分即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值