2018年4月11日 星期三

QuickSort

  1. """
  2. Python 2018/4/12
  3. """
  4. def QuickSort(data):  
  5.   
  6.    if len(data) < 2 :   # length <2 進行回傳
  7.           return data  
  8.    m , mv  = len(data)//2 , data[len(data)//2]  
  9.    del  data[m]      
  10.    #找出左右值判斷應放位置,並對左右子串再進行遞迴
  11.    return QuickSort([value for value in data if value < mv])+[mv]+ QuickSort([value for value in data if value > mv])  
  12.      
  13. numbers = [1,2,51,2,48,3,25,95,12,4,3,2,1,5,0,1,5]  #打印
  14. print(QuickSort(numbers))  


  1. /*
  2.     java
  3. */


  4. class Main {  
  5.   public static void main(String[] args) {  
  6.     Integer[] as = {1,2,13,2,12,4,3,4,8,3,2,1};  
  7.         ArrayList<Integer> s = quickSort(as);  
  8.         System.out.println(s);    
  9.       
  10.   }  
  11.    static ArrayList<Integer> quickSort(Integer[] integers){  
  12.               
  13.             ArrayList<Integer> orignal = new ArrayList(Arrays.asList(integers));    
  14.             if(integers.length<2return orignal;  // length <2 進行回傳
  15.             int pivot = integers.length/2,tmp = orignal.get(pivot);  
  16.             orignal.remove(pivot);  
  17.             ArrayList<Integer> lefts = new ArrayList();    
  18.             ArrayList<Integer> rights = new ArrayList();  
  19.             ArrayList<Integer> result = new ArrayList();  
  20.             //找出左右值判斷應放位置 
  21.             for(int i=0;i<orignal.size();i++)  
  22.                 if(tmp>orignal.get(i)) lefts.add(orignal.get(i));              
  23.                 else rights.add(orignal.get(i));  
  24.             //對左右子串再進行遞迴
  25.             result.addAll(quickSort(lefts.<Integer>toArray(new Integer[lefts.size()])));  
  26.             result.add(tmp);  
  27.             result.addAll(quickSort(rights.<Integer>toArray(new Integer[rights.size()])));  
  28.               
  29.             return result;  
  30.           }   

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。