【HarmonyOS】- 常见算法简单写法

文章目录

  • 知识回顾
  • 前言
  • 源码分析
    • 1. 冒泡排序
    • 2. 二分法查找
  • 拓展知识
    • 时间、空间复杂度
  • 总结


知识回顾

前言

常见算法简单写法


源码分析

1. 冒泡排序

function bubbleSort(arr: number[]): number[] {
    const n = arr.length;
    for (let i = 0; i < n - 1; i++) {
        for (let j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换元素
                const temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}

const originalArray: number[] = [5, 3, 8, 4, 2];
const sortedArray = bubbleSort(originalArray);
console.log(sortedArray);

  • 原理分析
  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一趟比较完成后,最大的元素就会 “浮” 到数组的末尾。
  • 针对所有的元素重复以上的步骤,除了最后已经排好序的元素。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
  • 总结

冒泡排序的主要特点是简单直观,但效率相对较低,尤其是对于大规模数据的排序。它的时间复杂度为 ,其中 是待排序数组的长度。尽管如此,在一些小型数据集或者对算法效率要求不高的场景下,冒泡排序仍然是一种可行的选择。

2. 二分法查找

function binarySearch(arr: number[], target: number): number {
    let left = 0;
    let right = arr.length - 1;
    while (left <= right) {
        let mid = Math.floor((left + right) / 2);
        if (arr[mid] === target) {
            return mid;
        } else if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}

const sortedArray: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const targetValue = 5;
const index = binarySearch(sortedArray, targetValue);
console.log(index === -1? "目标值不存在于数组中" : `目标值在数组中的索引为 ${index}`);
  • 原理分析

首先,确定待查找区间的范围,初始时整个序列作为查找区间。

  • 取区间的中间位置的值与目标值进行比较。
  • 如果中间位置的值等于目标值,则查找成功,返回中间位置的索引。
  • 如果中间位置的值大于目标值,则说明目标值在区间的前半部分,将查找区间缩小为前半部分,继续进行二分查找。
  • 如果中间位置的值小于目标值,则说明目标值在区间的后半部分,将查找区间缩小为后半部分,继续进行二分查找。
  • 重复步骤 2 到 5,直到找到目标值或者查找区间为空(表示目标值不存在于序列中)。

拓展知识

时间、空间复杂度

【HarmonyOS】- 常见算法简单写法_第1张图片

总结

你可能感兴趣的:(HarmonyOS,ArkTS,鸿蒙)