快排

作者: 小丸子啦啦啦呀 | 来源:发表于2024-04-03 14:15 被阅读0次

/**

  • 快速排序是一种交换排序的方式
  • 不稳定
  • 时间复杂度 最好nlogn 最差n平方
  • 找一个基准数字,每一轮排序之后找到一个中间位置指针,这个位置之前的数都比基准数字小,之后的数都比基准数字大,找到这个位置后,把这个位置的数字和基准数字交换
  • 为什么是用right指针的位置作为中间位置?
  • 一定要让right指针先走吗?https://blog.csdn.net/u013447565/article/details/82079959
  • 记得参数中有left right这样才能递归
  • 基准数字可以是随机的
  • @param arr
  • @param left
  • @param right
  • @returns {*}
    */
function sort(arr, left, right){
    const basePos = left;
    const base = arr[left];

    while (left<right){
        while (arr[left]<=base && left<right){
            left++;
        }

        while (arr[right]>base && left<right){
            right--;
        }

        swap(arr, left, right)
        console.log('round:', arr, left, right)
    }

    swap(arr, basePos, right);
    return right;
}

function quicksort(arr = [], left, right){
  if(left >= right) return arr;

  const middle = sort(arr, left, right);

  quicksort(arr, left, middle-1);
  quicksort(arr, middle+1, right);
}

function swap(arr, i, j){
    let temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

function main(){
    console.time();
    let arr = [6,1,2,7,3,9,8,4,5,10,2,1];

    quicksort(arr, 0, arr.length-1)
    console.log(arr);
    console.timeEnd();
}

main()

相关文章

  • 快排

    快排代码

  • 快排

  • 快排

    昨天晚上睡觉前兴起准备十分钟写出快排,结果纠结了两个小时愣是没有搞出来,很郁闷地睡觉去。今天地铁上跟LG又重新缕了...

  • 快排

    基本思想: 先从数列中取出一个数作为基准数。 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的...

  • 快排

  • 快排

    python实现 java实现:

  • 快排

    快速排序: 基本思想:1、先从数列中取出一个数作为基数。2、分区,将比此基数大的数放到它右边,小的数放到它左边。3...

  • 快排

    package sort;import java.util.Arrays;public class Quickso...

  • 快排

  • 快排

    一、(1)假如有一个数组 [8,10,2,3,6,1,5] ,我们拿出5作为参考,将小于5的数放到它的左边,大于5...

网友评论

      本文标题:快排

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