快速排序 java實現

weixin_30924079發表於2020-04-04

- -我的演算法太差了,看來看去排序演算法還是不會。最近看到了快排,發現很多網站上面的程式碼都不能正確執行,參考了一下他們的程式碼,,其實也差不多,自己再修改一下,我自己測試是可以執行的。

其實快排的原理就是遞迴,先選定一個key,把這個key作為參考值,從右往左遍歷找出比key小的數,從左往右找出比key大的數,然後兩個數交換,當左指標=右指標時,一次排序就完成了,此時陣列被分成了以key為分界線的兩個陣列,再接著對這兩個陣列進行排序。

程式碼如下

 1 import java.util.Arrays;
 2 
 3 public class MySort {
 4     public static void sort(int[] arr,int low,int high){
 5         //遞迴出口
 6         while(low>high){
 7             return ;
 8         }
 9         int i=low;    //左指標
10         int j=high;        //右指標
11         int key=arr[low];    //定義key
12         while(i<j){
13             while(i<j && arr[j]>key){    //從右往左遍歷,找出比key小的值,如果比key大,指標左移
14                 j--;
15             }
16             while(i<j && arr[i]<key){    //從左往右遍歷,找出比key大的值,如果比key小,指標右移
17                 i++;
18             }
19             if(i<j){   //交換兩個數
20                 int t=arr[i];
21                 arr[i]=arr[j];
22                 arr[j]=t;
23             }
24         }
25         //此時陣列被分為兩個以key為分界嶺的兩個陣列,再遞迴排序這兩個子陣列
26         sort(arr,low,i-1);
27         sort(arr,i+1,high);
28     }
29     
30     public static void main(String[] args) {
31         int[] a={45,34,67,23,100,98,1,3,2};
32         sort(a, 0, a.length-1);
33         System.out.println(Arrays.toString(a));
34     }
35 
36 }

 

轉載於:https://www.cnblogs.com/LolitaChen/p/8617602.html

相關文章