日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

快速排序(java代码)

發布時間:2023/12/9 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速排序(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代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。