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 的 bisect 模块提供了二分查找的支持,可以直接用于找到插入位置。
python复制代码 from bisect import insort # 示例 arr = [1, 3, 5, 7, 9] elem = 4 insort(arr, elem) print(arr)
这里 insort() 函数直接完成了查找插入位置并插入元素的操作,非常简洁。