面試常考察的排序 快速排序,歸併排序,堆排序

2021-06-27 10:00:54 字數 705 閱讀 3483

面試最經常考察的排序應該就是 快速排序,歸併排序和堆排序了。

例如題目:10萬個數字中找最大的10個數。 

1,因為10萬個數可以放到記憶體中,首先可以考慮使用快排的 partition 函式解決這個問題。

若partition 函式得到 index 值為 99990,則從下標 99990 到下標 99999 的10個數字就是最大的 10 個數。

時間複雜度為 o(n)。

int partition(int data,int length,int start,int end)

}++small;

swap(&data[small],&data[end]);

return small;

}void getmaxnumbers(int* input,int n,int* output,int k)

else

} for(int i = n-k ;i < n;++i)

}

2  可以考慮使用堆排序的思想解決。此處考慮小根堆較為適合。

使用前10個節點建立乙個小根堆,然後繼續遍歷其餘的所有數字。因為根據小根堆的性質,最小節點為根節點。如果遍歷到的數字比小根堆根節點小,則直接忽略,該遍歷到的數一定不是最大的10個數之一。若遍歷到的數比小根堆的根節點值大,則用該節點直接替換小根堆根節點,再調整堆即可。這樣僅需維護10個節點的小根堆即可。

。。。待續

快速排序 歸併排序

感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 package com.ruishenh.algoritmic public class sort static void printmsg int arrs system.out.println static int g...

快速排序,歸併排序

快速排序 quicksort 是對 氣泡排序的一種改進。設要排序的 陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。需要注意的是,多個相同的值的相對位置也許會在演算法結束時產...

歸併排序,快速排序

快速排序實現 filename fastsort description author hcq createtime 2019 04 12 10 01 public class fastsort arrays.stream arr foreach v system.out.println 排序後 s...