c语言删除数组最小值,C语言编程,删除数组a中值为x的第一个元素。

本文介绍了如何在非递减有序数组中使用二分查找算法找到第一个特定元素x的位置,并通过移除该元素实现高效操作。通过BitSearch函数实现二分查找,然后借助Romove函数进行删除,简化了在已排序数组中的复杂操作。
摘要由CSDN通过智能技术生成

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

ckchanel0

2013.12.24

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:58%    等级:7

已帮助:159人

这个题目的解题思路为:因为数组a已非递减有序,所以一般先对其进行二分查找,但要找到第一个x所在的下标,然后再对其进行删除。

int BitSearch(int a[], int x, int left, int right) { /*在数组a的从left到right的区域内二分查找x第一次出现的位置,如果不存在返回-1*/

int mid, i;

while(left <= right) {

mid = (left + right) / 2;

if(a[mid] == x) break;

if(a[mid] > x) right = mid - 1;

if(a[mid] < x) left = mid + 1;

}

if(left > right) return -1;

for(i = mid; i >= left && a[i] == x; i--); //寻找第一个x的位置

return i + 1;

}

void Romove(int a[], int *length, int index) {

int i;

if(index < 0 || index >= *length) return ; //删除的位置越界

for(i = index; i < *length - 1; i++) a[i] = a[i + 1];

*length--;

}

void delSq(int a[], int x, int *length) {

int index = BitSearch(a, x, 0, *length - 1);

Remove(a, length, index);

}

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值