最通俗易懂的快速排序算法詳解


文章轉載於:http://blog.csdn.net/vayne_xiao/article/details/53508973

 

如果以上C代碼看不懂,請看下面java代碼: 

 1 package algorithm;
 2 
 3 import java.util.Arrays;
 4 
 5 /**
 6  * @author yugenhai
 7  */
 8 public class QuickSort {
 9 
10 
11     public static void main(String[] args) {
12         int[] arrays = {3, 4, 6, 1, 8, 2, 5, 10, 7, 9};
13         quickSort(arrays, 0, arrays.length - 1);
14         System.out.println(Arrays.toString(arrays));
15     }
16 
17 
18     /**
19      * 快排
20      * @param arr
21      * @param left
22      * @param right
23      */
24     public static void quickSort(int[] arr, int left, int right) {
25         //聲明一個數來存 基准數
26         int pivot;
27         //一直可以排序
28         if (left < right) {
29             //從小到大
30             pivot = partition(arr, left, right);
31             //一直遞歸處理左邊的一堆數
32             quickSort(arr, left, pivot - 1);
33             //一直遞歸處理右邊的一堆數
34             quickSort(arr, pivot + 1, right);
35         }
36 
37     }
38 
39 
40     /**
41      * 分片排序
42      *
43      * @param arr
44      * @param left
45      * @param right
46      * @return
47      */
48     private static int partition(int[] arr, int left, int right) {
49         //取一個參照數
50         int key = arr[left];
51         //一直可以排序
52         while (left < right) {
53             //第一次右邊先走  右邊往左邊一步一步移動
54             while (left < right && arr[right] >= key) {
55                 //右邊向左一步
56                 right--;
57             }
58             //交換位置
59             arr[left] = arr[right];
60             //左邊往右邊走
61             while (left < right && arr[left] <= key) {
62                 left++;
63             }
64             //交換位置
65             arr[right] = arr[left];
66         }
67         //碰面了把參照數交給往右走的
68         arr[left] = key;
69         //返回左邊的數
70         return left;
71     }
72 }

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM