面试时考到了快速排序算法,当时没写出来,这次把整个思路给整理了一下
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 }