s6 快速排序

一:解题思路

Time:O(n*log(n)),Space:O(1) 是一种不稳定的排序方法

二:完整代码示例 (C++版和Java版)

C++:

 template <typename T>
        static void Swap(T& a,T& b)
        {
            T c(a);
            a=b;
            b=c;
        }

template <typename T>
        static int partition(T array[],int begin,int end,bool min2max=true)
        {
            int pivot=array[begin];
            while(begin<end)
            {
                while((begin<end) && (min2max?(array[end]>pivot):(array[end]<pivot))) end--;

                Swap(array[begin],array[end]);

                while((begin<end)&& (min2max?(array[begin]<=pivot):(array[begin]>=pivot))) begin++;

                Swap(array[begin],array[end]);
            }

            return begin;
        }

template <typename T>
        static void Quick(T array[],int begin,int end,bool min2max=true)
        {
            if(begin>=end) return;
            int pivot=partition(array,begin,end,min2max);
            Quick(array,begin,pivot-1,min2max);
            Quick(array,pivot+1,end,min2max);
        }

template <typename T>
        static void Quick(T array[],int len,bool min2max=true)
        {
if(len==0) return; Quick(array,
0,len-1,min2max); }

Java:

private void Swap(int[] array,int i,int j)
     {
         int temp=array[i];
         array[i]=array[j];
         array[j]=temp;
     }
     
     private int partition(int[] array,int begin,int end)
     {
         int pivot=array[begin];
         
         while (begin<end)
         {
             while(begin<end && array[end]>pivot) end--;
             
             Swap(array,begin,end);
             
             while(begin<end && array[begin]<=pivot) begin++;
             
             Swap(array,begin,end);
         }
         
         return begin;
     }

     private void Quick(int[] array,int begin,int end)
     {
         if(begin>=end) return;
         int pivot=partition(array,begin,end);
         Quick(array,begin,pivot-1);
         Quick(array,pivot+1,end);
     }
     
     public void Quick(int[] array)
     {
         if(array==null || array.length==0) return;
         
         Quick(array,0,array.length-1);
     }

猜你喜欢

转载自www.cnblogs.com/repinkply/p/12796025.html
今日推荐