已知一个升序的一维整型数组,插入一个数后保持为原序C语言多种算法
时间: 2024-11-13 08:22:00 浏览: 6
一维数组详细教案——高校教师资格证教案
在C语言中,当需要在一个已排序的一维整型数组中插入一个新元素并保持数组有序时,可以采用以下几种常见算法:
1. **二分查找法** (Binary Search) + 插入位置:如果数组已经有序,首先通过二分查找找到目标插入位置,然后将新元素插入到这个位置。这是一种高效的算法,时间复杂度通常为O(log n),n为数组长度。
```c
void insert_sorted(int arr[], int size, int value) {
int low = 0, high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] < value) {
low = mid + 1;
} else {
high = mid - 1;
}
}
arr[low] = value; // 将值插入到low索引处
// 如果low等于size,表示插入在数组尾部
}
```
2. **简单遍历法** (Linear Search): 如果数组规模较小或者不需要频繁查找插入位置,可以采用简单的遍历法,从数组末尾开始逐个比较,直到找到合适的位置。
```c
void insert_sorted_simple(int arr[], int size, int value) {
for (int i = size; i > 0 && arr[i - 1] > value; i--) {
arr[i] = arr[i - 1];
}
arr[i] = value; // 将value插入到正确位置
}
```
3. **双指针法** (Two Pointers): 这种方法利用两个指针分别从数组头部和尾部开始,找到中间值与新值的关系,进而移动正确的指针。当找到比新值小的元素时,向左移动左指针;反之向右移动右指针。
```c
void insert_sorted_two_pointers(int arr[], int size, int value) {
int left = 0, right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] >= value) {
right = mid - 1;
} else {
left = mid + 1;
}
}
arr[left] = value; // 插入位置在left
}
```
阅读全文