• Java,快速排序


    写了好久的注释,将就着看吧,>_<

    下面只是方法部分

    1. public class Kspx
    2. {
    3. //快速排序的实现
    4. /**
    5. * 通过数次根据大小的过滤,完成数组的排序
    6. * 以基准数为过滤的条件,将大于基准数的数和小于基准数的元素分开到基准数两边
    7. * 每一边都是继续找一个基准值进行过滤,直到边界重合,不能继续过滤
    8. * @param arr 需要排序的数组
    9. * @param left l哨兵的起点
    10. * @param right r哨兵的起点
    11. */
    12. public void quickSort(int[] arr,int left,int right)
    13. {
    14. int l = left;//左边的哨兵
    15. int r = right;//右边的哨兵
    16. int pivot = arr[(left + right) / 2];//基准数取中间的数
    17. while(l < r)
    18. {
    19. while(arr[l] < pivot)//l哨兵没找到比基准数小的数就继续往后找
    20. {
    21. l++;
    22. }
    23. while(arr[r] > pivot)//r哨兵没找到比基准数大的数就继续往前找
    24. {
    25. r--;
    26. }
    27. if(l >= r)//如果l哨兵超过r哨兵就停止寻找
    28. {
    29. break;
    30. }
    31. int temp = arr[l];//交换l哨兵和r哨兵找到的元素
    32. arr[l] = arr[r];
    33. arr[r] = temp;
    34. if(arr[l] == pivot)//如果l哨兵找到的元素和r哨兵找到的元素都是基准数,就会进入死循环
    35. {
    36. r--;
    37. }
    38. if(arr[r] == pivot)//如果有一方因为找到的元素是基准数而停止寻找,则让另一方继续寻找
    39. {
    40. l++;
    41. }
    42. }
    43. if(l == r)//如果l哨兵和r哨兵处于同一个位置,则让l哨兵往右一步,让r哨兵往左一步,用以参与后面的递归。
    44. {
    45. l++;
    46. r--;
    47. }
    48. //只要还没排序完到边界,就会把被基准值分开的部分继续进行排序
    49. if(left < r)
    50. {
    51. quickSort(arr,left,r);//以最终的r哨兵所在的元素的位置作为右边界,也就是下次调用时r哨兵的起点
    52. }
    53. if(l < right)
    54. {
    55. quickSort(arr,l,right);//以最终的l哨兵所在的元素的位置作为左边界,也就是下次调用时l哨兵的起点
    56. }
    57. }
    58. }

  • 相关阅读:
    pytest 的使用===谨记
    Java集合类(笔记)
    python使用json模块将json数据内容读取出来、进行数据反序列化
    记录基于scapy构造ClientHello报文的尝试
    【校招VIP】java语言考点之垃圾回收算法
    第六章、Python 装饰函数
    “闭关修炼”这么久,吃透这些“微服务”笔记,足够面试涨10K
    LeetCode220807_73、旋转图像
    MySQL入门第五天——数据表简单查询
    全网都在用的英语配音软件~
  • 原文地址:https://blog.csdn.net/2302_79468488/article/details/134065524