美文网首页
JS书写冒泡排序和快速排序

JS书写冒泡排序和快速排序

作者: 恐怕是小珠桃子 | 来源:发表于2016-09-26 23:21 被阅读105次

冒泡排序

先说冒泡,这个原理最简单,其实一趟冒泡要做的事情就是“把最重的泡泡沉到底下去”,也就是一趟排序要找出最大的数,那怎么实现呢?用当前数字和下一个数字做比较,如果当前>下一个,进行值交换,自然就可以通过一次循环找到最大的数。
那么我们需要控制的就是循环次数,这个当然是用数组长度来控制,一趟冒泡后,循环次数减一,看下面一段代码:

function bubbleSort(arr) {
    const end = arr.length - 1;

    for (let i = end; i >= 0; i--) {
        let temp = 0;

        for (let k = 0; k < i; k++) {
            if (arr[k] > arr[k + 1]) {
                arr[k] = arr[k] + arr[k + 1] - (arr[k + 1] = arr[k]);
                temp = 1;
            }
        }
        if (temp == 0) {
            break;
        }
    }

    return arr;
}

我们可以看到,上面代码片段中设置了temp,它是用来做什么的呢?用于标记一次循环时是否发生了交换。也就是说,如果在一趟循环结束后,没有发生任何交换,也就是说现在已经是升序了,不需要再排了,可以结束了,这样就有效的降低了时间复杂度。

快速排序

快排的思想想必大家也都知道,在一次排序后,数字a的左边都是比它小的,右边都是比它大的。然后对左边和右边的数字做同样的操作。比如我们先选择第一个数a,然后对数组进行循环,遇到比a大的就不管,遇到比a小的就和上一个比a大的数进行交换,数组循环完毕后,将a与当前正在比对的值进行交换,就可以实现“左边<a<右边”,然后对左边右边的数据递归排序,具体代码如下:

function quickSort(arr, start, end) {
    let m = start;

    if (start >= end) {
        return;
    }

    for (let i = start + 1; i <= end; i++) {
        if (arr[i] < arr[start]) {
            m++;
            arr[i] = arr[i] + arr[m] - (arr[m] = arr[i]);
        }
    }

    arr[start] = arr[start] + arr[m] - (arr[m] = arr[start]);
    quickSort(arr, start, m - 1);
    quickSort(arr, m + 1, end);

    return arr;
}

相关文章

  • JS书写冒泡排序和快速排序

    冒泡排序 先说冒泡,这个原理最简单,其实一趟冒泡要做的事情就是“把最重的泡泡沉到底下去”,也就是一趟排序要找出最大...

  • JS算法笔记 - 排序

    冒泡排序 改进冒泡排序 选择排序 快速排序 在JS中相对较快 插入排序 改进:二分插入排序 希尔排序 动态定义间隔...

  • 排序算法篇_快速排序法

      快速排序(Quick Sort)法和冒泡排序法类似,都是基于交换排序思想的。快速排序对冒泡排序法进行了改进,从...

  • Java实现常见的算法

    主要罗列了常见的选择排序,冒泡排序和快速排序,还有二分查找的算法。 选择排序 冒泡排序 快速排序 二分查找 注意二...

  • Datawhale | 编程第6期 Test 3

    排序 1.实现归并排序、快速排序、插入排序、冒泡排序、选择排序、堆排序(选做) 归并排序 快速排序 插入排序 冒泡...

  • 基本排序(笔记)

    冒泡排序 选择排序 快速排序

  • 看图说话排序算法之冒泡排序

    排序算法的种类非常多,这里总结冒泡排序和对冒泡排序的改进---快速排序的循环实现和递归实现。 一丶冒泡排序 假设待...

  • 原生javascript实现简单的数据结构与算法

    最近面试被问到冒泡排序和快速排序,要求现场手撕代码。 一.冒泡排序 Chrome下的测试结果: 二.快速排序 找出...

  • 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

    图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序 图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

  • 排序

    冒泡排序: 冒泡排序 选择排序: 插入排序: 希尔排序: 归并排序: 快速排序: 堆排序: 计数排序: 桶排序: ...

网友评论

      本文标题:JS书写冒泡排序和快速排序

      本文链接:https://www.haomeiwen.com/subject/uzzqyttx.html