linux公社 java算法_Java快速排序算法
快速排序算法思想:
快速排序(Quicksort)是對冒泡排序的一種改進。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
用一個算法排序圖形象表示了快速排序
一趟快速排序的算法是:
1)設置兩個變量i、j,排序開始的時候:i=0,j=N-1;
2)以第一個數組元素作為關鍵數據,賦值給key,即key=A[0];
3)從j開始向前搜索,即由后開始向前搜索(j--),找到第一個小于key的值A[j],將A[j]和A[i]互換;
4)從i開始向后搜索,即由前開始向后搜索(i++),找到第一個大于key的A[i],將A[i]和A[j]互換;
5)重復第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中A[j]不小于key,4中A[i]不大于key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指針位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令循環結束)
最通俗的講法:
取第一個數跟數組中的其他數比較,小的在左邊大的在右邊,就這樣一直遞歸排序
排序的基本過程
以數組{49,38,65,97,76,13,27,49}為例,選擇第一個元素49為基準
初始化關鍵字: [49,38,65,97,76,13,27,49]
代碼實現:
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {49, 38, 65, 97, 76, 13, 27, 49};//設置一個數組
sort(a,0,a.length-1);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //調用快速排序方法
System.out.println(Arrays.toString(a));? ? ? ? ? ? ? ? //將快速排序過的數組輸出
}
public static void sort(int a[], int left, int right) {
int i, j, key;
if (left > right) {? //這個判斷很重要的,有這個才會在函數遞歸的時候跳出
return;
}
i = left;? ? ? ? ? ? ? ? //左邊第一位開始
j = right;? ? ? ? ? ? //右邊最后一位
key = a[i];? ? //用數組的第一位數做為參考數
while (i < j) {? // 從數組的兩端交替向中間掃描
while (i < j && a[j] >= key){? ? //從右邊開始掃描
j--;
}
//跳出循環說明右邊這個點的數有比參考數小,所以兩個數互換位子,小的到左邊
a[i] = a[j];
while (i
i++;
}
//跟上面同理,只是相反
a[j] = a[i];
}
a[i] = key;? ? ? ? //這是循環到最后的時候 a[j] = a[i];產生重復,i的位置的數應該是key,所以替換回來
sort(a, left, i - 1);? ? ? ? // 對小于key一邊的遞歸排序
sort(a, i + 1, right);? ? ? // 對高于key一邊的遞歸排序
//直到兩邊排序完畢,在以上中的if判斷中跳出這個方法成功快速排序
}
總結
以上是生活随笔為你收集整理的linux公社 java算法_Java快速排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java list 面试题_java【集
- 下一篇: 红帽oracle关系,redhat和or