• 快速排序算法


    1.概述

    快速排序算法是在分治算法基础上设计出来的一种排序算法,和其它排序算法相比,快速排序算法具有效率高、耗费资源少、容易实现等优点。

    2.实现思路

    快速排序算法的实现思路是:

    • 从待排序序列中任选一个元素(假设为 pivot)作为中间元素,将所有比 pivot 小的元素移动到它的左边,所有比 pivot 大的元素移动到它的右边;
    • pivot 左右两边的子序列看作是两个待排序序列,各自重复执行第一步。直至所有的子序列都不可再分(仅包含 1 个元素或者不包含任何元素),整个序列就变成了一个有序序列。

    真正实现快速排序算法时,我们通常会挑选待排序序列中第一个元素或者最后一个元素作为中间元素。

    3.步骤演示

    1) 建立 2 个指针(命名为 lo 和 hi),分别指向序列中第一个元素和倒数第 2 个元素,如下图所示:
     


    2) lo 指针向右移动,当指向的元素不小于 31 时暂停。显然,当前指向的 35 > 31,所以 lo 暂时不移动;
     


    3) hi 指针向左移动,当指向的元素不大于 31 时暂停。显然,当前指向的 26< 31,所以 hi 暂时不移动;
     


    4) 交换 lo 和 hi 所指元素的位置,如下图所示:
     


    5) 重复执行 2~4 步,直至 lo ≥ hi。此时,将 pivot 元素与 lo 所指元素交换位置。下面的动画演示了整个分割的过程:

     4.代码实现(将第一个元素作为pivot)

    1. /**
    2. * @author wangli
    3. * @data 2022/6/28 16:02
    4. * @Description:
    5. */
    6. public class QuickSort {
    7. public static void main(String[] args) {
    8. int[] arr={1,4,63,5,7,9,12};
    9. quickSort(arr,0, arr.length-1);
    10. System.out.println(Arrays.toString(arr));
    11. }
    12. public static void quickSort(int[] arr, int left, int right) {
    13. //判断传入值是否符合
    14. if(left>=right){
    15. return;
    16. }
    17. //左右指针
    18. int l=left;
    19. int r=right;
    20. //中心轴pivot
    21. int pivot=arr[left];
    22. //临时交换节点
    23. int temp;
    24. //判断两个数是否符合在pivot左边的是比他小在pivot右边比他大
    25. while (l!=r){
    26. //找到比pivot小的值
    27. while (arr[r]>=pivot&&l<r){
    28. r--;
    29. }
    30. while (arr[l]<=pivot&&l<r){
    31. l++;
    32. }
    33. //将不符合的两个数交换位置
    34. temp=arr[l];
    35. arr[l]=arr[r];
    36. arr[r]=temp;
    37. }
    38. //当l和r相等时,将pivot放到中间,正好实现左边小右边大的
    39. arr[left]=arr[l];
    40. arr[l]=pivot;
    41. //向左边递归排序,直至无法排序为止
    42. quickSort(arr,left,l-1);
    43. quickSort(arr,r+1,right);
    44. }
    45. }

    5.返回

     

  • 相关阅读:
    wpf Line
    电脑WIFI突然消失
    批量执行redis命令总结
    有被惊艳到!阿里达摩院面向开发者公布的Java全体系成长路线,从P5-P8职级全系
    MongoDB学习路线
    Python函数绘图与高等代数互融实例(三):设置X|Y轴文本标签|网格线
    linux文件基本操作
    介绍 TensorFlow 的基本概念和使用场景。
    一文5个步骤从0到1实现Jmeter分布式压力测试(建议收藏)
    Selenium 是什么?简单了解Selenium
  • 原文地址:https://blog.csdn.net/wang20010104/article/details/125506169