0
点赞
收藏
分享

微信扫一扫

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

C语言实现

方法一:直接遍历插入

这种方法直接遍历数组,找到合适的位置插入新元素,然后移动后续元素。

c复制代码
 #include <stdio.h>  
 
   
 
 void insertSorted(int arr[], int *n, int elem) {  
 
     int i;  
 
     // 数组扩容(这里假设数组足够大,不进行动态扩容)  
 
     // 如果需要动态扩容,则需要在函数外部处理  
 
     (*n)++;  
 
   
 
     // 从后向前遍历,找到插入位置  
 
     for (i = *n - 1; (i > 0 && arr[i - 1] > elem); i--) {  
 
         arr[i] = arr[i - 1];  
 
     }  
 
     arr[i] = elem;  
 
 }  
 
   
 
 int main() {  
 
     int arr[] = {1, 3, 5, 7, 9};  
 
     int n = sizeof(arr) / sizeof(arr[0]);  
 
     int elem = 4;  
 
   
 
     insertSorted(arr, &n, elem);  
 
   
 
     for (int i = 0; i < n; i++) {  
 
         printf("%d ", arr[i]);  
 
     }  
 
     return 0;  
 
 }

方法二:二分查找插入位置

由于数组已排序,可以使用二分查找来找到插入位置,然后插入。

c复制代码
 #include <stdio.h>  
 
   
 
 void insertSortedBinary(int arr[], int *n, int elem) {  
 
     int low = 0, high = *n - 1, mid;  
 
     // 二分查找插入位置  
 
     while (low <= high) {  
 
         mid = (low + high) / 2;  
 
         if (arr[mid] == elem) {  
 
             // 如果元素已存在,则不插入  
 
             return;  
 
         } else if (arr[mid] < elem) {  
 
             low = mid + 1;  
 
         } else {  
 
             high = mid - 1;  
 
         }  
 
     }  
 
   
 
     // 数组扩容(这里假设数组足够大)  
 
     (*n)++;  
 
   
 
     // 插入元素并移动后续元素  
 
     for (int i = *n - 1; i > low; i--) {  
 
         arr[i] = arr[i - 1];  
 
     }  
 
     arr[low] = elem;  
 
 }  
 
   
 
 int main() {  
 
     // 示例代码与上述相同  
 
 }

Python实现

方法一:直接遍历插入

Python 的列表操作比 C 语言更方便,可以直接使用 insert() 方法。

python复制代码
 def insert_sorted(arr, elem):  
 
     arr.append(float('inf'))  # 临时添加一个极大值,简化插入逻辑  
 
     i = len(arr) - 2  
 
     while arr[i] > elem:  
 
         arr[i + 1] = arr[i]  
 
         i -= 1  
 
     arr[i + 1] = elem  
 
     arr.pop()  # 移除临时添加的极大值  
 
   
 
 # 示例  
 
 arr = [1, 3, 5, 7, 9]  
 
 elem = 4  
 
 insert_sorted(arr, elem)  
 
 print(arr)

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

方法二:二分查找插入位置

Python 的 bisect 模块提供了二分查找的支持,可以直接用于找到插入位置。

python复制代码
 from bisect import insort  
 
   
 
 # 示例  
 
 arr = [1, 3, 5, 7, 9]  
 
 elem = 4  
 
 insort(arr, elem)  
 
 print(arr)

这里 insort() 函数直接完成了查找插入位置并插入元素的操作,非常简洁。

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

举报

相关推荐

将一个数插入已经排好序的数组中

0 条评论