校招 快速排序

2021-08-17 03:17:40 字數 1431 閱讀 9391

快速排序是我們之前學習的氣泡排序的公升級,他們都屬於交換類排序,都是採用不斷的比較和移動來實現排序的。快速排序是一種非常高效的排序演算法,它的實現,增大了記錄的比較和移動的距離,將關鍵字較大的記錄從前面直接移動到後面,關鍵字較小的記錄從後面直接移動到前面,從而減少了總的比較次數和移動次數。同時採用「分而治之」的思想,把大的拆分為小的,小的拆分為更小的,其原理如下:對於給定的一組記錄,選擇乙個基準元素,通常選擇第乙個元素或者最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞迴地排序劃分的兩部分,直到序列中的所有記錄均有序為止。

(1)最壞時間複雜度 

最壞情況是指每次區間劃分的結果都是基準關鍵字的左邊(或右邊)序列為空,而另一邊區間中的記錄僅比排序前少了一項,即選擇的關鍵字是待排序記錄的最小值或最大值。最壞情況下快速排序的時間複雜度為

(2)最好時間複雜度 

最好情況是指每次區間劃分的結果都是基準關鍵字的左右兩邊長度相等或者相差為1,即選擇的基準關鍵字為待排序的記錄的中間值。此時進行比較次數總共為 nlogn,所以最好情況下快速排序的時間複雜度為

(3)平均時間複雜度 

快速排序的平均時間複雜度為

(4)空間複雜度 

快速排序的過程中需要乙個棧空間來實現遞迴。最好情況,遞迴樹的深度為

(5)基準關鍵字的選取,基準關鍵字的選取是決定快速排序演算法的關鍵,常用的基準關鍵字的選取方式如下: 

第一種:三者取中。將序列首、尾和中間位置上的記錄進行比較,選擇三者中值作為基準關鍵字。 

第二種:取left和right之間的乙個隨機數

以陣列為例,選擇第乙個元素49為基準 

初始化關鍵字: [49,38,65,97,76,13,27,49] 

index = a[i]; // 用子表的第乙個記錄做基準

while (i < j)

a[i] = index;// 將基準數值替換回 a[i]

sort(a, low, i - 1); // 對低子表進行遞迴排序

sort(a, i + 1, hight); // 對高子表進行遞迴排序

}public

static

void

quicksort(int a)

public

static

void

main(string args) ;

quicksort(a);

system.out.println(arrays.tostring(a));}}

校招演算法之插入排序

插入排序 摘自百科 插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度 為o n 2 是穩定的排序方法。插入排序主要分為直接排序和折半排序,本質的思想是一致的,只是實現的思路不一致。直接排序是從右到左進行比較進行...

阿里校招2014 8 29

附加題 1 給定乙個query和乙個text,均由小寫字母組成。要求在text中找出以同樣順序連續出現在query中最長連續字母序列的長度。例如,query為 acbac text為 acaccbabb 那麼text中的 cba 為最長的連續出現在query中的字串行,因此,返回結果應該為其長度3。...

決戰2015校招

主要原因可能 沒寫好,下回一定要形成思路再動筆。然後就是字要寫好一點,不要潦草。9月18日晚 同學接到zx的面試通知,希望也會通知我吧。接到lc通知,明天迎來第一面!9月19日 lc一面 感覺沒答好 資料鏈路層的協議有哪些,b樹的定義,mapreduce的優點在哪?得認真看書了。xw一面 基本沒問我...