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);
            }
        }
    
  • 相关阅读:
    C语言I博客作业04
    C语言I博客作业03
    C语言1博客作业02
    作业1
    C语言||作业01
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    笔记本
  • 原文地址:https://www.cnblogs.com/ming-szu/p/8922298.html
Copyright © 2011-2022 走看看