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


文章转载于: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