c语言已有一个排好序的数组
时间: 2025-01-05 21:33:29 浏览: 35
### C语言中对已排序数组的操作
#### 对已排序数组进行二分查找
对于已经排好序的数组,可以高效地使用二分查找算法来定位特定元素的位置。该方法通过反复将待查序列折半并比较中间值来进行快速检索。
```c
int binary_search(int sorted_arr[], int target, int low, int high) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (sorted_arr[mid] == target)
return mid;
if (sorted_arr[mid] < target)
low = mid + 1;
else
high = mid - 1;
}
return -1; // 如果找不到目标,则返回-1表示未找到
}
```
此函数接受一个整型参数`target`作为要寻找的目标值以及两个边界索引`low`和`high`用于限定当前搜索区间[^1]。
#### 合并与去重操作
如果存在多个已排序数组需要合并成一个新的有序列表,并去除重复项,可以通过如下方式实现:
```c
void merge_and_deduplicate(int arr1[], int size1, int arr2[], int size2, int result[]) {
int i = 0, j = 0, k = 0;
bool isDuplicate;
while (i < size1 && j < size2) {
if (arr1[i] < arr2[j])
result[k++] = arr1[i++];
else if (arr1[i] > arr2[j])
result[k++] = arr2[j++];
else {
result[k++] = arr1[i++]; // 只需加入一次即可
++j;
}
// 去除连续相同的元素
isDuplicate = true;
while ((isDuplicate ? arr1[i] : arr2[j]) == result[k - 1]) {
if (++i >= size1 || ++j >= size2) break;
isDuplicate = !isDuplicate;
}
}
// 将剩余部分复制到结果集中
for (; i < size1; ) result[k++] = arr1[i++];
for (; j < size2; ) result[k++] = arr2[j++];
}
```
这段代码展示了如何有效地处理两个升序排列好的整形数组之间的交集运算,同时保证最终得到的结果也是严格递增且不含任何冗余副本的形式。
阅读全文
相关推荐

















