演算法基礎 快速排序

2021-08-19 08:06:05 字數 1188 閱讀 3149

要求:10分鐘內寫出快排!

之前筆試用到排序演算法,總是想用快排但是又不能在規定時間寫出來,歸根到底還是快排的邏輯步驟沒有搞清,所以才導致每次失敗!徹底搞清快排動作邏輯,這樣即使長時間不用也能臨時寫出來!

思路:1. 就像選擇排序每排一次序排好最小/大值一樣,快速排序每排一次序 會 將中軸值(預設取陣列第乙個)排好,並且中軸值之前的都是小於它的,中軸值之後都是大於它的。這樣 中軸值之前(arr,low,middle-1)/中軸值之後(arr,middle+1,high)  作為新的陣列又能進行快速排序,直到陣列個數為1。

public void _quicksort(int() arr,int low,int high)

2.     每次排序的邏輯是: 將陣列的第乙個元素(選取的中軸值)放到它應該處的位置並返回它排完序後下標。比他大的要放在他後面,比他小的放在他前面。

我們將中軸值拿出來,從後往前找,while(arr[high]>tmp) high-- ;直到遇到比中軸值小的,arr[low] = arr[high];將小的值賦值到中軸值前面;接著暫停從後往前找,開始從前往後找,while(arr[low]private int getmiddle(int arr,int low,int high)

arr[low]=tmp;

return low;

綜上:我們的快排就寫好啦!

public class quicksort ;

int arr2 = ;

quicksort qs = new quicksort();

qs.quicksort(arr2);

for(int i : arr2)

}public void quicksort(int arr)

}private void _quicksort(int arr,int low,int high)

}//快排的 單次排序: 中軸值 不是 中間值,它返回的是 你隨機(陣列第乙個)的中軸值在排完序後的座標

private int getmiddle(int arr,int low,int high)

arr[low] = arr[high]; //將 比中軸小的值 移到低端

while(lowlow++;

}arr[high]=arr[low]; //

}//low == high

arr[low] = tmp;

return low;}}

基礎排序演算法 快速排序

快速排序大家應該都知道,快速排序是一種不穩定的演算法,運氣差可以降速降到冒泡的速度,運氣好能快到比歸併還快的速度。首先,快速排序需要選擇乙個x,這個數很多人稱為基準。剛開始的時候選擇 a 0 當x,讓i l,j r 剛開始的時候l和r分別為最左邊和最右邊。1 讓j減小,直到遇到 i 或者找到乙個小於...

快速排序演算法 基礎

快速排序的演算法的核心思想是設定乙個值,把比這個值大的往右 扔 比這個值小的往左 扔 陣列快速排序的過程 設定兩個變數i j,排序開始時 i 0,j n 1 n為排序總數 以陣列中的第乙個元素作為比較的值,賦給變數key,即key a 0 首先從j往前搜尋,即從後往前 j 找到第乙個小於key的值a...

演算法基礎 快速排序

分治法 選擇分界點 arr l arr mid arr r 調整陣列區間 左半部分 分界點,右半部分 分界點 遞迴處理左半部分,遞迴處理右半部分 3.遞迴處理 quicksort arr,j 1,r intmain 的驗證 1.第k小的數 題目鏈結 include include using nam...