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的位置可任取)
最新推荐文章于 2024-04-16 10:44:29 发布