• JS排序算法


     1. 冒泡排序

     数组相邻元素进行比较,每次比较将最大/最小的值冒泡到应在的位置,经过n-1次比较后,数组变为有序数组。

    1. function bubble(arr) {
    2. let temp;
    3. for (let i = 0; i < arr.length - 1; i++) {
    4. for (let j = 0; j < arr.length - 1 - i; j++) {
    5. if (arr[j] > arr[j + 1]) {
    6. temp = arr[j];
    7. arr[j] = arr[j + 1];
    8. arr[j + 1] = temp;
    9. }
    10. }
    11. }
    12. return arr;
    13. }

    2.选择排序

    每次比较一轮,将比较的结果(最大值或者最小值)放在应在的位置。

    1. function selectSort(arr) {
    2. let min;
    3. for(let i = 0; i < arr.length; i++) {
    4. // 将当前位置设为最小值
    5. min = i;
    6. for(let j = i + 1; j < arr.length; j++) {
    7. // 遍历数组其他元素,查看有没有更小的
    8. if (arr[j] < arr[min]) {
    9. min = j;
    10. }
    11. }
    12. // 如果当前位置不是最小值,那么交换位置
    13. if (min !== i) {
    14. const temp = arr[min];
    15. arr[min] = arr[i];
    16. arr[i] = temp;
    17. }
    18. }
    19. return arr;
    20. }

    3.  插入排序

    将未排序的元素插入到已排序的数组中去,最后形成一个排序数组。

    1. function insertSort(arr) {
    2. let value, i, j;
    3. for(i = 0; i < arr.length; i++) {
    4. value = arr[i];
    5. // 比较排序的数组和当前元素
    6. // 从排序数组最后一项开始比较,如果大于当前值,则向后移一位
    7. // 直到当前值大于排序数组的某一个值
    8. for(j = i - 1; j > -1 && arr[j] > value; j--) {
    9. arr[j + 1] = arr[j];
    10. }
    11. arr[j + 1] = value;
    12. }
    13. return arr;
    14. }

     4. 合并排序

    将两个已经排序的数组合并成一个有序的数组。

    1. // 合并两个数组
    2. function merge(left, right) {
    3. let i = 0, j = 0;
    4. const result = [];
    5. while(i < left.length && j < right.length) {
    6. if (left[i] < right[j]) {
    7. result.push(left[i++]);
    8. } else {
    9. result.push(right[j++]);
    10. }
    11. }
    12. return result.concat(left.slice(i), right.slice(j));
    13. }
    14. // 将数组拆分成若干个数组,两两合并
    15. function mergeSort(arr) {
    16. if (arr.length === 1) {
    17. return arr;
    18. }
    19. const middle = Math.floor(arr.length / 2);
    20. const left = arr.slice(0, middle);
    21. const right = arr.slice(middle);
    22. return merge(mergeSort(left), mergeSort(right));
    23. }

     5. 快速排序

    快速排序通过选择一个基准值将数据进行分割,使得小于基准值的数据在一个数组中,大于基准值的数据在另一个数组,然后递归这两个数组直到排序完成。

    1. function getPosition(arr, left, right) {
    2. let pointer = arr[left];
    3. while (left < right) {
    4. while (left < right && arr[right] > pointer) {
    5. right--;
    6. }
    7. arr[left] = arr[right];
    8. while (left < right && arr[left] <= pointer) {
    9. left++;
    10. }
    11. arr[right] = arr[left];
    12. }
    13. arr[left] = pointer;
    14. return left;
    15. }
    16. function quickSort(arr, left, right) {
    17. if (left < right) {
    18. let pos = getPosition(arr, left, right);
    19. quickSort(arr, left, pos - 1);
    20. quickSort(arr, pos + 1, right);
    21. return arr;
    22. }
    23. }
  • 相关阅读:
    MotionLayout--在可视化编辑器中实现动画
    spring-Study
    Domain Enhanced Arbitrary Image Style Transfer via Contrastive Learning
    约数:AcWing 870. 约数个数
    Redis集群(Cluster)
    IP协议的相关特性
    【PowerQuery】Excel的PowerQuery按需刷新
    Android 系统通过pid和vid固定usb声卡节点
    【Java并发】聊聊ReentrantReadWriteLock锁降级和StampedLock邮戳锁
    每日一题 2258. 逃离火灾(手撕困难!!!)
  • 原文地址:https://blog.csdn.net/foradmin/article/details/95530472