排序演算法很多,快速排序、堆排序、選擇排序、氣泡排序等等。最近一周一直再看排序演算法,多數比較容易理解,其中多數理解起來都比較容易,但是實現起來感覺堆排序比較麻煩,還要建堆和處理堆。
再看快速排序的時候,突然想到如果根據乙個基準值將其他數字分為大小兩堆,再在兩堆內繼續實行二分比較……如果注意觀察排好序的元素其下標和值在大小上的對應關係:下標小的元素其值也必定比較小。就比較好程式設計了,只要元素的下標大小關係和值得大小關係不對應,就將兩者調換,就可以實現排序。雖然理論上這種想法時間複雜度很高(n^2),但是空間複雜度不高。不過在處理海量資料時顯然時間複雜度影響更大,所以這種懶人排序價值有限,博友們看看便好!
//給定陣列懶人排序(下標與值對應),從小到大排列。
#include int main()
; for(i=0;i<10;i++)
for(j=0;j<10;j++)
}printf("\nthe sorted numbers are:\n");
for(i=0;i<10;i++) printf("%5d",a[i]);
}
排序演算法之排序
private static void insertsort int ints 時間複雜度 o n 2 空間複雜度 o 1 private static void mergesort int ints,int left,int right private static void merge int ...
排序演算法 排序演算法之選擇排序
最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...
演算法 排序演算法之堆排序
package sortarith 堆排序 構建最大堆,堆頂即為最大元素,每次取出最大元素後,再重新構建堆,這樣再拿出次大值,迴圈往返 注意 構建堆時需要調整每個非葉子節點,確定其為子堆的最大值 而調整堆時,只需要調整堆頂元素 特例1 若所給待排序陣列array本身已是最大堆型別,可不進行構建堆,即...