数据结构-快速排序
快速排序,我感觉有点难理解,不是太懂它怎么选择基准数的,其他的倒是还好,看了挺久的也只是初步了解。
以下是我按照我的理解写的代码:
1 package com.company; 2 3 public class QuickSort1 { 4 private static void quickSort(int[] a, int left, int right) throws ArrayIndexOutOfBoundsException 5 { 6 if(left < 0 || left > right || right > a.length-1 ) 7 { 8 return ; 9 } 10 int temp = a[left]; 11 int i,j; 12 if(left < right) { 13 i = left; 14 j = right; 15 while (i < j) { 16 //当从右至左的值大于基准值时j-- 17 while (i < j && a[j] >= temp) { 18 j--; 19 } 20 //当查找到从右至左的值出现第一个小于基准值的时候将右边的值赋值给左边的值 21 a[i] = a[j]; 22 //当从左至右的值大于基准值时i++ 23 while (i < j && a[i] <= temp) { 24 i++; 25 } 26 //当查找到从左至右的值出现第一个大于基准值的时候将左边的值赋值给右边的值 27 a[j] = a[i]; 28 } 29 //跳出循环时应该i与j相等 这时的i j 值就是基准值放置的下标 30 a[i] = temp; 31 //再调用自己去放置当前基准值左右的数 32 quickSort(a, left, i - 1); 33 quickSort(a, i + 1, right); 34 } 35 } 36 public static void main(String[] args) { 37 int[] a = {1,3,4,6,2,5,8,14,7,9}; 38 quickSort(a, 0, a.length-1); 39 for(int n : a) 40 { 41 System.out.print(n+" "); 42 } 43 } 44 45 }