• //快速排序的非递归版本


    //快速排序的非递归版本
    1. package quickSort;
    2. import java.util.Stack;
    3. /**
    4. * @author 真他喵的学不动咯
    5. * @create 2022-08-19--20:52
    6. */
    7. public class quictwo { //快速排序的非递归版本
    8. public static class Job{
    9. public int L;
    10. public int R;
    11. public Job(int left,int right){
    12. L=left;
    13. R=right;
    14. }
    15. }
    16. //分层【用了递归】
    17. public static int[] partition(int[] arr, int L, int R){
    18. /*
    19. arr[L,...,R],arr[R做划分值
    20. L......R
    21. < = >
    22. */
    23. int lessR=L-1; //L-1为左边预备区域
    24. int moreL=R; //R是右边第一区域
    25. int index=L; //L是左边第一轮开始的地方,从L开始遍历
    26. while (index<moreL){
    27. if (arr[index]<arr[R]){
    28. swap(arr,++lessR,index++);
    29. }
    30. else if (arr[index]>arr[R]){
    31. swap(arr,--moreL,index);
    32. }else{
    33. index++;
    34. }
    35. }
    36. swap(arr,moreL,R); //moreL和最后一个数进行了交换,所以下一句直接就是moreL,而不是moreL-1
    37. return new int[]{lessR+1,moreL}; //lessR+1 是等于区域的第一个,moreL是等于区域的最后一个
    38. }
    39. public static void swap(int[] arr,int i,int j){
    40. int temp=arr[i];
    41. arr[i]=arr[j];
    42. arr[j]=temp;
    43. }
    44. public static void quicksort2(int[] arr){
    45. if (arr==null||arr.length<2){
    46. return;
    47. }
    48. Stack<Job> stack=new Stack<>(); //把Job放入栈
    49. stack.push(new Job(0,arr.length-1)); //0~N上排序
    50. while (!stack.isEmpty()){ //栈中不为空,就一直做
    51. Job cur=stack.pop();
    52. int L=cur.L;
    53. int R=cur.R;
    54. int[] equals=partition(arr,L,R); //知道左任务、右任务,在栈然后一直做
    55. //equals返回等于区域
    56. if (equals[0]>cur.L){ //此时有小于区域
    57. stack.push(new Job(cur.L,equals[0]-1));
    58. }
    59. if (equals[1]<cur.R){ //此时有大于区域
    60. stack.push(new Job(equals[1]+1,R));
    61. }
    62. }
    63. }
    64. }

  • 相关阅读:
    浏览器事件循环原理 —— 任务优先级
    多神经网络模型联合训练,全连接神经网络模型
    堆排序,以及大顶堆构造过程Java实现
    【java期末复习题】第5章 继承与多态
    前端代码规范常见错误 一
    C/C++游戏开发(easyx框架)回合制——魔塔
    Spark读取文件性能优化
    技术分享 | Jenkins 节点该如何管理?
    Element登录+注册
    SaaSBase:什么是忠仕商务通?
  • 原文地址:https://blog.csdn.net/weixin_48752513/article/details/126431895