1. 程式人生 > >Quick Sort(三向切分的快速排序)(Java)

Quick Sort(三向切分的快速排序)(Java)

情況 ann int 方法 性能提升 ring system.in time clas

 1 //三向切分的快速排序
 2 //這種切分方法對於數組中有大量重復元素的情況有比較大的性能提升
 3 
 4 public static void main(String[] args)
 5 {
 6     Scanner input = new Scanner(System.in);
 7     int n = input.nextInt();
 8     int[] a = new int[n];
 9         
10     for(int i = 0; i < a.length; i++)
11     a[i] = (int)(Math.random() * 100);
12 //System.out.println(Arrays.toString(a)); 13 long start = System.currentTimeMillis(); 14 qsort3way(a, 0, a.length - 1); 15 long end = System.currentTimeMillis(); 16 //System.out.println(Arrays.toString(a)); 17 System.out.println(end - start); 18 //10000000個測試數據用時350ms 相比普通快速排序提升約35%的性能
19 } 20 21 public static void qsort3way(int[] a, int front, int rear) 22 { 23 if(front >= rear) 24 return; 25 26 int key_index = front, i = front + 1, j = rear; 27 while(i <= j) 28 { 29 if(a[i] < a[key_index]) //key_index永遠指向第一個key值 30 swap(a, i++, key_index++);
31 else if(a[i] > a[key_index]) 32 swap(a, i, j--); 33 else //a[i] = a[key_index] 34 i++; 35 } 36 37 qsort3way(a, front, key_index - 1); 38 qsort3way(a, j + 1, rear); 39 }

Quick Sort(三向切分的快速排序)(Java)