二分查找
给定一个从小到大的有序数组,查找元素k是否在数组中。
简单的思路是顺序查找,从前往后,逐个对比,但是效率较低。
可以根据数组从小到大有序这一特点来进行折半查找(二分查找)。
二分查找实现
可以使用left和right来表示当前要查找的区间左右边界。显然,初始化left = 1, right = n。
- 取出中间元素mid = (left + right) / 2
- 比较a[mid] 和 k的大小关系
- a[mid] > k,答案在左边区间,修改right = mid - 1
- a[mid] < k,答案在右边区间,修改left = mid + 1
- a[mid] == k,找到答案,输出相应信息
- 在left <= right的情况下,执行上述操作,否则查找失败。
参考程序
int binarySearch (int k, int l, int r) {
int mid;
while (l <= r) {
mid = l + r >> 1;
if (a[mid] < k) l = mid + 1;
else if (a[mid] > k) r = mid - 1;
else return mid;
}
return -1; //未找到
}
冒泡排序
let kong = 0
// 利用冒泡排序将新数组进行排序
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
kong = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = kong
}
}
}