面试时考到了快速排序算法,当时没写出来,这次把整个思路给整理了一下

1 /*
 2     快速排序的Java实现
 3     思路:快速排序本质上是把基准数插入到它自己本来该待得位置,即以基准数为界限,左边的数据全部小于基准数,
 4          右边的数据全部大于基准数,这也就完成了快速排序的一次过程。然后还是以基准数为界限,把数据分为左右
 5          两部分,分别再对其进行快速排序。重复以上过程,运算完毕后,数据也就变得井然有序了。
 6     Step1:定义数据的基准数baseNum、探测数low,探测数high,low为数据首位置,high为数据尾位置
 7     Step2:从后往前遍历数据,当arr[high]<baseNum时,令arr[low]=high,停止遍历,运行Step4
 8     Step3:从前往后遍历数据,当arr[low]>baseNum时,令arr[high]=low,停止遍历,运行Step3
 9     Step4:当low=high时,arr[low]=baseNum,将数据以baseNum为界限分为两部分
10     Step5:对划分好的两组数据在进行Step1,2,3,4操作,直至结束为止
11  */
12 public class FastSortDemo {
13     public static void main(String[] args) {
14         int[] arr={6,1,2,7,9,3};
15         fastSort(arr,0,5);
16         System.out.println(Arrays.toString(arr));
17     }
18 
19     private static void fastSort(int[] arr,int low,int high) {
20         int left,right,baseNum;
21         //定义left、righ是为了在逻辑层面切割原数组
22         left=low;
23         right=high;
24         //跳出递归的条件,可不能忘了
25         if (left>=right)
26             return;
27         baseNum=arr[left];
28         while (low!=high){
29             for (; high > low; high--) {
30                 if (arr[high]<baseNum){
31                     arr[low]=arr[high];
32                     break;
33                 }
34             }
35             for (; low < high; low++) {
36                 if (arr[low]>baseNum){
37                     arr[high]=arr[low];
38                     break;
39                 }
40             }
41         }
42         arr[low]=baseNum;
43         //递归
44         fastSort(arr,left,low-1);
45         fastSort(arr,high+1,right);
46     }
47 
48 }