zoukankan      html  css  js  c++  java
  • Java实现递归与非递归的快速排序

    挖坑法递归

     void quicksort(int s[],int left,int right){
            if(left<right){
                int temp,i=left,j=right;
                temp=s[right];
                while(i<j){
                    //寻找左边第一个大于基准值的下标
                    while(s[i]<=temp&&i<j)i++;
                    if(i<j)s[j--]=s[i];
                    //寻找右边第一个小于基准值的下标
                    while(s[j]>=temp&&i<j)j--;
                    if(i<j)s[i++]=s[j];
                }
                s[i]=temp;
                quicksort(s,left,i-1);      //递归左边部分数组
                quicksort(s,i+1,right);     //递归右边部分数组
            }
        }
    

     非递归(使用LinkedHashMap)

    void quickSort1(int s[],int left,int right){
            LinkedHashMap<Integer,Integer> lhp=new LinkedHashMap<>();
            //将0,n放入LinkedHashMap
            lhp.put(left,right);
            while(!lhp.isEmpty()){      //只要有需要排序的段
                //读取left,right
                Iterator<Map.Entry<Integer,Integer>> it=lhp.entrySet().iterator();
                left=it.next().getKey();
                right=lhp.get(left);
                //并从LinkedHashMap中删除
                lhp.remove(left,right);
                if(left>=right)continue;
                int i=left,j=right,temp=s[right];
                while(i<j){         //遍历排序一遍
                    while(s[i]<=temp&&i<j)i++;
                    if(i<j)s[j--]=s[i];
                    while(s[j]>=temp&&i<j)j--;
                    if(i<j)s[i++]=s[j];
                }
                s[i]=temp;
                lhp.put(left,i-1);
                lhp.put(i+1,right);
            }
        }
    
  • 相关阅读:
    java实习生面试
    使用vue可视化界面创建vue项目
    Git操作分支
    ECharts获取Json文件数据
    Java中字符串反转
    es6新增的API
    es5新增的数组的方法
    操作字符串的相关方法
    排序方法总结
    js内置对象-Array
  • 原文地址:https://www.cnblogs.com/ming-szu/p/8922298.html
Copyright © 2011-2022 走看看