說在前面的廢話:以前在學習資料結構排序那一章的時候就想,什麼時候有空了,做乙個排序比較器。比較這些排序的效果。最近剛好有空,就利用qt的圖形介面做了乙個排序比較器。記錄在此,方便自己,也希望有助於大家。
一、專案介紹
本程式是乙個比較九大排序演算法效率的演示程式。如下圖所示:
使用者可以通過選擇數量規模,來選擇需要測試的數量大小。數量規模數量級從10-1000000;本程式的原始資料隨機生成的int型正整數資料,大小從0-1000000;還有,通過選擇排序方式選擇需要比較的排序演算法,(可多選);選擇是否記錄結果,將決定程式是否把隨機生成的原始資料和排序的資料記錄到檔案中。同時,在右邊的結果顯示框,還可以顯示程式執行的進度和結果。
二、編寫九大排序
對於排序來說,總共有很多很多很多種,這裡選擇了基礎的九大排序。如下圖所示:
具體的**如下:
//簡單插入排序
void sort::siminssort() //1 4 3 2 7 9 5}}
}}//設定基準,並返回基準的位置 //6
int sort::partion(int low, int high) //1 3 3 7 10
data[low] = data[high];
while(lowdata[large])
large = left_chi;
if(rig_chi < length && data[rig_chi]>data[large])
large = rig_chi;
if(large != i)
}//初始化大根堆
void sort::initmaxheap(int length)
//合併兩個有序序列
void sort::merge(int beg, int mid, int end)
else
}//將剩下的元素複製進排序好的暫時空間中
while(i1<=j1)
while(i2<=j2)
//複製回原陣列
for(int i = beg,k = 0;i<=end;++i,++k)
delete temp;
}//二路歸併排序
void sort::mergesort(int beg,int end)
int dif = max-min; //最大值和最小值的差值
//int fre[dif+1]; // 頻率陣列
int *fre = new int[dif+1]; //此處需要在堆中申請記憶體,否則百萬級的資料,程式會崩潰
for(int i = 0;i=0;--i)
delete temp;
}//基數排序
void sort::radsort()
if(min_index != i)}}
具體各排序原理在網上書上都有很多介紹,在此就不贅述了。
總共內容比較多,在這先寫這些,剩下的見排序比較器(下)
比較排序 氣泡排序 插入排序 比較排序
以下排序都以從小到大排序為例 1.氣泡排序 氣泡排序就是從第乙個元素開始,對每乙個元素與它之後所有的元素進行比較,將較小的乙個放在前,大的放在後 氣泡排序兩層迴圈 一般排序都是兩層迴圈 內層迴圈有兩種寫法,形式稍稍不同,但排序結果相同 第一種for int i 0 ia j for int j 0 ...
Map 重寫比較器根據 value 排序
根據key進行排序 map 的根據 key 排序需要用到 treemap 物件,因為它是預設按照公升序進行輸出的,可以使用比較器 compareto 對它進行降序排序,comparator 可以對集合物件或者陣列進行排序的比較器介面,實現該介面的 public compare t o1,to2 方法...
排序演算法比較
本章中已經研究並仔細分析了多個內部排序方法。對於這些內部排序方法之間的比較,主要從以下幾個方面綜合考慮 時間複雜度 空間複雜度 演算法穩定性 演算法簡單性 待排序記錄數 n的大小 記錄本身的資訊量等。選擇n 個整數組成一些隨機排序,各種內部排序方法的實際時間如圖 7 10 所示。從時間複雜度看,所有...