码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序的java实现(key的位置可任取)

时间:2015-07-14 07:34:34      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

 1 /**
 2  * @author 黄志伟
 3  */
 4 public class QuickSort {
 5     public static void main(String[] args) {
 6         int [] array = {49,38,65,97,76,13,13,27,4,8,2,3,56};
 7         quickSort(array, 0, array.length - 1);
 8         for (int i = 0; i < array.length; i++) {
 9             System.out.println(array[i]);
10         }
11     }
12 
13     /**
14      * @param nums 要递归处理的数组
15      * @param left 左边界 begin 0
16      * @param right 右边界 end length-1
17      */
18     private static void quickSort(int[] nums,int left,int right){
19         int x = (left+right)/2;
20         int key = nums[x];
21         int i = left;
22         int j = right;
23         int index = x;
24         //如果长度为一或越界则不需要处理
25         if(left >= right) return;
26         while(i < j){
27             //左边跳过>=key的一切值
28             while(i < j && nums[j] >= key){
29                 j--;
30             }
31             //右边跳过<key的一切值
32             while(i < j && nums[i] < key){
33                 i++;
34             }
35             //使用index来保存key值所在的数组下标
36             //x的对应值只会不对换或对换一次
37             if(i == x && i != j){
38                 index = j;
39             }
40             if(j == x && i != j){
41                 index = i;
42             }
43             //交换i、j的对应值
44             int tmp = nums[i];
45             nums[i] = nums[j];
46             nums[j] = tmp;
47         }
48         //判断i == j(边界)处的值大于还是小于0,划分到不同的地方
49         if(nums[i] < key){
50            ++i;
51         }
52         int temp = nums[i];
53         nums[i] = nums[index];
54         nums[index] = temp;
55         quickSort(nums,left,i-1);
56         quickSort(nums,i+1,right);
57     }
58 }

 

快速排序的java实现(key的位置可任取)

标签:

原文地址:http://www.cnblogs.com/fcat/p/4644441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!