美文网首页
nodejs实现冒泡排序和快速排序

nodejs实现冒泡排序和快速排序

作者: 笙箫竽笛 | 来源:发表于2020-07-28 09:27 被阅读0次

冒泡排序:双层循环,内部循环每次选出最大值或者最小值,放到头上或者放在尾部

function sort (arr, sorting = 1) {
     if (sorting < 0) { //逆序
        for (let i = 0; i < arr.length; i++) {
            for (let j = i + 1; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    let a = arr[i];
                    arr[i] = arr[j];
                    arr[j] = a;
                }
            }
        }
     } else { //正序
        for (let i = 0; i < arr.length; i++) {
            for (let j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    let a = arr[i];
                    arr[i] = arr[j];
                    arr[j] = a;
                }
            }
        }
     }
 }

快速排序:递归调用,每次递归选出一个“中值”,头部和尾部分别跟“中值”比较,找出可交换值后交换位置。每次交换后,数组的逆序减少比其他排序算法要多,所以相对比较快

function quickSort(arr, start, end, sorting = 1) {

    if(start > end){
        return;
    }
    let i = start;
    let j = end;
    let m = arr[start];
    if (sorting < 0) { //逆序
        while (i < j) {
            //先看右边,依次往左递减
            while (m <= arr[j] && i < j) {  //6<5  9
                j--;
            }
            //再看左边,依次往右递增
            while (m >= arr[i] && i < j) {  //6>=7
                i++;
            }
            //如果满足条件则交换
            if (i < j) {
                let t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }
        }
    } else { // 正序
        while (i < j) {
            //先看右边,依次往左递减
            while (m >= arr[j] && i < j) {  //6<5  9
                j--;
            }
            //再看左边,依次往右递增
            while (m <= arr[i] && i < j) {  //6>=7
                i++;
            }
            //如果满足条件则交换
            if (i < j) {
                let t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }
        }
    }
    //最后将基准为与i和j相等位置的数字交换
    arr[start] = arr[i];
    arr[i] = m;
    //递归调用左半数组
    quickSort(arr, start, j - 1, sorting);
    //递归调用右半数组
   quickSort(arr, j + 1, end, sorting);
}

相关文章

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

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

  • nodejs实现冒泡排序和快速排序

    冒泡排序:双层循环,内部循环每次选出最大值或者最小值,放到头上或者放在尾部 快速排序:递归调用,每次递归选出一个“...

  • Datawhale | 编程第6期 Test 3

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

  • JavaScript实现排序算法

    实现了冒泡,选择,插入,快排,希尔,归并 冒泡排序 选择排序 插入排序 快速排序 希尔排序 归并排序

  • 常用排序算法

    目录 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 堆排序 致谢 1. 冒泡排序 C实现,从小到大 ...

  • 7天练|Day3:排序和二分查找

    关于排序和二分查找的几个必知必会的代码实现排序实现归并排序、快速排序、插入排序、冒泡排序、选择排序编程实现O(n)...

  • 基础算法|快速排序

    快速排序(Quicksort),是对冒泡排序算法的一种改进。 快速排序算法通过多次比较和交换来实现排序,其排序流程...

  • Java冒泡排序,快速排序理解与实现

    经典排序算法中,有好几种排序,下边说下冒泡排序和快速排序的理解与实现,记太多容易混乱; 1.冒泡排序:字面理解,值...

  • 排序算法

    排序 1. 选择排序 代码实现 2. 插入排序 代码实现 3. 冒泡排序 代码实现 4. 快速排序 代码实现

  • 基本算法

    冒泡排序、插入排序、选择排序、快速排序、二分查找(Objective-C实现)

网友评论

      本文标题:nodejs实现冒泡排序和快速排序

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