• 算法系列(二)


      长时间没接着写了,今天接着未完成的革命,接下来就是快速排序:

      快速排序的思想就是先选取一个基准点,然后将小于基准点的放在基准点的左边,大于基准点的数放在基准点右边,然后将左、右边的数组再重复上述步骤直到全部排序完成。

      还是如数组:20 、40、50、10、60       

    left指针指向20,right指针指向60,base参照数指向20。

    其实思想是蛮简单的,就是通过第一遍的遍历(让left和right指针重合)来找到数组的切割点。

    第一步:首先我们从数组的left位置取出该数(20)作为基准(base)参照物。

    第二步:从数组的right位置向前找,一直找到比(base)小的数,

                如果找到,将此数赋给left位置(也就是将10赋给20),

                此时数组为:10,40,50,10,60,

                left和right指针分别为前后的10。

    第三步:从数组的left位置向后找,一直找到比(base)大的数,

                 如果找到,将此数赋给right的位置(也就是40赋给10),

                 此时数组为:10,40,50,40,60,

                 left和right指针分别为前后的40。

    第四步:重复“第二,第三“步骤,直到left和right指针重合,

                 最后将(base)插入到40的位置,

                 此时数组值为: 10,20,50,40,60,至此完成一次排序。

    第五步:此时20已经潜入到数组的内部,20的左侧一组数都比20小,20的右侧作为一组数都比20大,

                以20为切入点对左右两边数按照"第一,第二,第三,第四"步骤进行,最终快排大功告成。

    附上JS实现代码:

     1     //快速排序
    2 function QuickSort(arr,left,right){
    3 if (left <right ){
    4 var i=Division(arr,left ,right );//获得下次分割的基准位置
    5
    6 QuickSort (arr,left ,i-1);//基准位置左侧进行递归排序
    7 QuickSort (arr ,i+1,right );//基准位置右侧进行递归排序
    8 }
    9 return arr;
    10 }
    11
    12 function Division(arr,left,right){
    13 var baseItem=arr[left ]; //将左指针作为基准数
    14 while (left <right ){//只要两指针未重合就一直执行
    15 while (left <right && arr[right] >=baseItem ){//对右指针向左侧移动,直到找到比基准数小的值
    16 right --;
    17 }
    18 arr [left ]=arr[right ];//将找到的值赋给左指针
    19
    20 while (left <right && arr[left ] <= baseItem ){//对左指针向右侧移动,直到找到比基准值大的值
    21 left ++;
    22 }
    23 arr[right ]=arr[left ];//将找到的值赋给右指针
    24 }
    25 arr[left ]=baseItem ;//两针重合后将基准值赋给左指针;最终,我们发现left位置的左侧数值部分比left小,left位置右侧数值比left大
    26 return left ;//返回重合后此时的指针位置
    27 }
    作者:欢醉
    公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
    出处:http://zhangs1986.cnblogs.com/
    码云:https://gitee.com/huanzui
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    Top
  • 相关阅读:
    css最简单的在背景图片上显示模糊背景色的方法
    css添加网格背景
    获取bing必应图片
    JavaScript超过一定高度导航添加类名
    6行css就可以解决的瀑布流布局的方法
    css实现背景图横向滚动
    JavaScript根据一个元素的显示隐藏控制另一个元素的显示和隐藏
    JavaScript判断地址栏链接与导航栏链接是否一致并给导航添加class
    JavaScript实现选中文字自动复制
    Day 74 算法基础(二)
  • 原文地址:https://www.cnblogs.com/zhangs1986/p/2383524.html
Copyright © 2020-2023  润新知