面試常問 堆排序

2021-08-28 10:34:23 字數 852 閱讀 8758

思路——**——分析——改進

【思路】

堆排序有兩種,一種利用堆的特性,先構建最大堆,每次得到最大堆的堆頂元素;另一種是直接原地使用堆排序。

原地堆排序:

將陣列構建成堆,交換陣列的第乙個元素和最後乙個元素。依次對除去最後的元素的剩下陣列進行排序。

【**】

原地排序:

public class main;

heapsort(arr,arr.length);

}public static void heapsort(int arr,int n)

for(int i = n-1;i>0;i--)

}public static void shiftdown(int arr,int n,int k)

}}

堆外排序:

public class main;

maxheap mh = new maxheap(arr);

for(int i = arr.length-1;i>=0;i--)

for(int i:arr)

}static class maxheap

maxheap(int arr)

for(int i = n/2;i>=1;i--)

count = n;

}void shiftdown(int k)

}int extractmax()

}public static void swap(int arr,int i,int j)

}

【分析】

堆排序時間複雜度o(nlgn),空間複雜度o(1)。不穩定排序。

【改進】

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

面試最經常考察的排序應該就是 快速排序,歸併排序和堆排序了。例如題目 10萬個數字中找最大的10個數。1,因為10萬個數可以放到記憶體中,首先可以考慮使用快排的 partition 函式解決這個問題。若partition 函式得到 index 值為 99990,則從下標 99990 到下標 9999...

面試必問之堆排序及堆

堆排序 heapsort 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法 時間複雜度是o nlogn 是基於關鍵字比較排序演算法裡比較理想的排序演算法 另個是快速排序 空間複雜度o 1 堆分為最大堆和最小堆,最大堆的根節點最大,最小堆的根節點最小 最大堆用於遞增堆排序,最小堆用於遞減堆排序,...

Linux面試常問命令

1,rm 命令 r 遞迴的刪除資料夾下的內容 f 強制刪除,如果資料夾下沒有指定的檔案,也不會進行提示。例如,rm f file0。如果當前資料夾下沒有file0這個檔案,不會報錯。2,mkdir 命令 p 使用這個引數可以建立多級目錄。3,cp,mv命令 cp test1 file1 test3 ...