• 快速排序算法


    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.返回

     

  • 相关阅读:
    无重复字符的最长子串(python3)
    【Android音视频开发】音频编码原理
    two point(双指针)
    【证明】线性变换的像集是一个线性空间
    学习笔记 | 模型鲁棒性的因果框架
    如何使用SHC对Shell脚本进行封装和源码隐藏
    使用react-amanda快速搭建管理类型的系统
    java使用多线程并行处理逻辑后合并处理结果(Async注解方式)
    并发刺客(False Sharing)——并发程序的隐藏杀手
    Android Studio 实现登录注册-源代码 (连接MySql数据库)
  • 原文地址:https://blog.csdn.net/wang20010104/article/details/125506169