代码:
- function quickSort(arr, left = 0, right = arr.length - 1) {
- // left和right默认为数组首尾
- if (left < right) {
- let partitionpartitionIndex = partition(arr, left, right);
- quickSort(arr, left, partitionIndex - 1);
- quickSort(arr, partitionIndex + 1, right);
- }
- return arr;
- }
- function partition(arr, left, right) {
- let pivot = left;
- let index = left + 1; // 满足比较条件的依次放在分割点后
- for (let i = index; i <= right; i += 1) {
- if (arr[i] < arr[pivot]) {
- swap(arr, i, index);
- index += 1;
- }
- }
- swap(arr, index - 1, pivot); // 交换顺序时,以最后一位替换分隔项
- return index - 1;
- }
三、搜索算法
3.1 顺序搜索
顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法。
- function findItem(item, arr) {
- for (let i = 0; i < arr.length; i += 1) {
- if (item === arr[i]) {
- return i;
- }
- }
- return -1;
- }
3.2 二分搜索
二分搜索要求被搜索的数据结构已排序。以下是该算法遵循的步骤:
- 选择数组的中间值
- 如果选中值是待搜索值,那么算法执行完毕
- 如果待搜索值比选中值要小,则返回步骤1在选中值左边的子数组中寻找
- 如果待搜索值比选中值要大,则返回步骤1在选中值右边的子数组中寻找
- function binarySearch(item, arr) {
- arr = quickSort(arr); // 排序
- let low = 0;
- let high = arr.length - 1;
- let mid;
- while (low <= high) {
- min = Math.floor((low + high) / 2);
- if (arr[mid] < item) {
- low = mid + 1;
- } else if (arr[mid] > item) {
- high = mid - 1;
- } else {
- return mid;
- }
- }
- return -1;
- }
四、算法复杂度
4.1 理解大O表示法 (编辑:云计算网_泰州站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|