• 算法疑难(js实现)---1、快速排序


    算法疑难(js实现)---1、快速排序

    一、总结

    一句话总结:

    快排就是将数列按照基准数分成左(左区间都比基准数小)右(右区间都比基准数大)两个区间,对左右区间递归快排,直到区间只有一个数,这样区间就全部有序了,然后将全部有序的区间合并起来就得到排序好的结果
     1 function quickSort(arr) {
     2     //1、找基准数,并且将比基准数小的全部放到左边(左数组),
     3     // 大于等于基准数的全部放到右边(右数组)
     4     let base_num=arr[0];//基准数
     5     let left_arr=[];//左数组
     6     let right_arr=[];//右数组
     7     for (let i=1;i<arr.length;i++){
     8         //比基准数小的都放在左数组,否则放在右数组
     9         if(arr[i]<base_num){
    10             left_arr.push(arr[i]);
    11         }else{
    12             right_arr.push(arr[i]);
    13         }
    14     }
    15 
    16     //2、对左右数组分别进行快排,返回排序好的左右数组
    17     // (条件:就是数组中的元素要大于等于2个)
    18     if(left_arr.length>=2) left_arr=quickSort(left_arr);
    19     if(right_arr.length>=2) right_arr=quickSort(right_arr);
    20     //快排之后的left_arr和right_arr 都是有序
    21 
    22     //3、合并排序好之后的左数组、基准数、排序好的右数组,并且返回
    23     return left_arr.concat(base_num,right_arr);
    24 }

    1、快排的思路?

    1、拆分区间:先从数列中取出一个数作为基准数,将比这个数小的全放到它的左边,大于或等于它的数全放到它的右边
    2、递归:再对左右区间重复第1步,直到各区间只有一个数,区间只有一个数,这样区间就有序了
    3、合并区间:将有序的区间合并起来,这样整个数列就有序了

    二、快速排序

    博客对应课程的视频位置:1、快速排序
    https://www.fanrenyi.com/video/20/173

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>快速排序</title>
     6 </head>
     7 <body>
     8 <!--
     9 快速排序的思路:
    10 1、先从数列中取出一个数作为基准数
    11 2、将比这个数小的全放到它的左边,大于或等于它的数全放到它的右边
    12 3、再对左右区间重复第二步,直到各区间只有一个数
    13 4、将有序的区间合并起来,这样整个数列就有序了
    14 
    15 let arr=[31,23,34,2,13,234];
    16 
    17 第一步:比如取第一个数为基准数,比31小的都放31左边,比31大的都放到31的右边
    18 
    19 23,2,13,  31  ,34,234
    20 
    21 第二步:对31 左右两边的数组都做同样的操作:选基准数,比基准数小的放左边,比基准数大的放右边
    22 左边:[23,2,13]:选23为基准:2,13,  23
    23 
    24 右边:[34,234]:选34为基准:34,  234
    25 2,13,23,31,34,234
    26 
    27 -->
    28 <script>
    29     let arr=[31,23,34,2,13,234,31,43,343,65,23,43,13,2];
    30 
    31     function quickSort(arr) {
    32         //1、找基准数,并且将比基准数小的全部放到左边(左数组),
    33         // 大于等于基准数的全部放到右边(右数组)
    34         let base_num=arr[0];//基准数
    35         let left_arr=[];//左数组
    36         let right_arr=[];//右数组
    37         for (let i=1;i<arr.length;i++){
    38             //比基准数小的都放在左数组,否则放在右数组
    39             if(arr[i]<base_num){
    40                 left_arr.push(arr[i]);
    41             }else{
    42                 right_arr.push(arr[i]);
    43             }
    44         }
    45 
    46 
    47         //2、对左右数组分别进行快排,返回排序好的左右数组
    48         // (条件:就是数组中的元素要大于等于2个)
    49         if(left_arr.length>=2) left_arr=quickSort(left_arr);
    50         if(right_arr.length>=2) right_arr=quickSort(right_arr);
    51         //快排之后的left_arr和right_arr 都是有序
    52 
    53 
    54         //3、合并排序好之后的左数组、基准数、排序好的右数组,并且返回
    55         return left_arr.concat(base_num,right_arr);
    56 
    57     }
    58     let ans=quickSort(arr);
    59     console.log(ans);
    60 </script>
    61 </body>
    62 </html>
     
  • 相关阅读:
    桌面应用程序ClickOne打包部署
    Linux系统基础5周入门精讲(Linux发展过程)
    Linux系统基础5周入门精讲(服务器介绍)
    算法进阶--动态规划
    行为型模式
    结构型模式
    设计模式
    哈希表--树
    数据结构
    查找排序相关面试题
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12517093.html
Copyright © 2020-2023  润新知