快速排序(java代码)
文章目錄
- 一、快排核心思想
- 二、實例
- 三、代碼實現(java)
一、快排核心思想
快排核心思想就是:首先在待排序數組中隨便選擇一個數作為節點(pivot),然后從最后面(high)往左查找比這個節點(pivot)小的數,并且從最前面(low)往右查找比這個節點(pivot)大的數(low),情況1:找到后就把這兩個數進行交換,然后接著上面的查找交換直到low等于high,球后將節點(pivot)與low位置處的數進行交換,這樣比pivot小的數都在其前面,比pivot大的數就在其后面,然后把數組以pivot分為兩半,重復上述操作;情況2:直到low 等于 high都沒有找到,就直接交換pivot和low位置的數據,然后同樣的將數組以pivot分為兩半重復上述操作。(說的挺抽象的,還是看看下面舉例吧)
二、實例
以數組{6,3,7,1,9,4,8,5,2,10}為例。
1.為了便于理解,就以6作為節點,開始排序時low等于6,high等于10
2.從由右往左找比節點6小的數就是2,從左往右找比節點6大的數就是7,把這兩個數交換(這樣查找的目的是為了將大的數放后面,較小的數放前面)
交換后:
3.交換后,high接著往左找比節點6小的數,同時low接著往右找比6大的數,分別是5和9,交換low和high
交換后:
4.接著相同操作,high往左找到比6小的數4,low往右找大于節點6的數時,low與high相遇,那么本輪查找就結束。接著節點6與low和high的相遇點4交換。這樣比6小的數都在其前面,比6da的數都在其后面。
交換后:
5.一輪操作結束后,原數組被節點6“一分為二”,分別是比6都小的4,3,2,1,5和比6都大的8,9,7,10兩個數組。接著就將這兩個數組重復上面的操作,操作完成后理論上是數組被“一分為四”,四個數組再進行上面的操作如此循環
三、代碼實現(java)
public class QuickSort {//快排實現方法public static void quickRow(int[] array, int low, int high){int i,j,pivot;//結束條件if (low >= high) {return;}i = low;j = high;//選擇的節點,這里選擇的數組的第一數作為節點pivot = array[low];while (i < j){//從右往左找比節點小的數,循環結束要么找到了,要么i=jwhile (array[j] >= pivot && i < j){j--;}//從左往右找比節點大的數,循環結束要么找到了,要么i=jwhile (array[i] <= pivot && i < j){i++;}//如果i!=j說明都找到了,就交換這兩個數if (i < j){int temp = array[i];array[i] = array[j];array[j] = temp;}}//i==j一輪循環結束,交換節點的數和相遇點的數array[low] = array[i];array[i] = pivot;//數組“分兩半”,再重復上面的操作quickRow(array,low,i - 1);quickRow(array,i + 1,high);}//測試public static void main(String[] args) {int[] array = {6,3,7,1,9,4,8,5,2,10};int low = 0,high = array.length - 1;quickRow(array,low,high);for (int i : array){System.out.println(i);}} }總結
以上是生活随笔為你收集整理的快速排序(java代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 随便想想
- 下一篇: html文件怎么导出stl文件,各种3D