常用 | 冒泡排序和二分查找

C语言中常用的排序和查找的方法就是冒泡排序和二分查找,接下来来简单看一看:

冒泡排序:

冒泡排序适用于所需要的排列的元素较少的时候,因为需要一次次去遍历。每次遍历令最大的一个数到全部元素的最后一个去。

直接放一个冒泡排序的函数:

void bubblesort(int n, int a[]) {//n为元素个数,a[]为储存排列对象的数组
	int i, j;
	int temp;
	for (i = 0; i < n - 1; i++) {
		for (j = 0; j < n - 1 - i; j++) {
			if (a[j] > a[j + 1]) {
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
}

​

二分查找:

二分查找很像初高中学习的二分法,前提当然是先要让查找的范围是单调的才行。简单来说就是通过令查找范围中中间的的元素和查找对象进行比较来缩小进一步查找的区间。

先来放一个基础的:

// 返回第一个不小于val的值的下标
//a为非降序数组,n为数组长度,key为要查找的值
int lower_bound(int a[], int n, int key) {
	int mid;
	int l = 0, r = n;
	while (l < r) {
		mid = (l + r) >> 1;
		if (key <= a[mid])
			r = mid;
		else
			l = mid + 1;
	}
	return l;
}

上面的代码不仅仅可以找到所需查找的值,而且输出的还是最小的下标。

二分查找还有很多变式,如输出第一个比查找目标大的值:

int upper_bound(int a[], int n, int val) {
	int mid;
	int l = 0, r = n;
	while (l < r) {
		mid = (l + r) >> 1;
		if (val >= a[mid])
			l = mid + 1;
		else
			r = mid;
	}
	return l;
}

或者还有给定复杂的单调函数,给y求x的题目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值