排序比較器(上)

2021-09-10 14:26:22 字數 1634 閱讀 4043

說在前面的廢話:以前在學習資料結構排序那一章的時候就想,什麼時候有空了,做乙個排序比較器。比較這些排序的效果。最近剛好有空,就利用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 所示。從時間複雜度看,所有...