思路——**——分析——改進
【思路】
堆排序有兩種,一種利用堆的特性,先構建最大堆,每次得到最大堆的堆頂元素;另一種是直接原地使用堆排序。
原地堆排序:
將陣列構建成堆,交換陣列的第乙個元素和最後乙個元素。依次對除去最後的元素的剩下陣列進行排序。
【**】
原地排序:
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 ...