實驗八 排序演算法實驗比較 資料結構

2021-09-27 04:03:35 字數 2156 閱讀 5966

背景

排序是計算機內經常進行的一種操作,其目的是將一組「無序」的記錄序列調整為「有序」的記錄序列。

假設含n個記錄的序列為

其相應的關鍵字序列為  

這些關鍵字相互之間可以進行比較,即在它們之間存在著這樣乙個關係 :

kp1≤kp2≤…≤kpn

按此固有關係將上式記錄序列重新排列為的操作稱作排序。

排序演算法是電腦科學中最重要的研究問題之一。對於排序的研究既有理論上的重要意義,又有實際應用價值。它在計算機圖形、計算機輔助設計、機械人、模式識別、及統計學等領域具有廣泛應用。 常見的排序演算法有起泡排序、直接插入排序、簡單選擇排序、快速排序、堆排序等。

例1:有時候應用程式本身就需要對資訊進行排序。為了準備客戶賬目,銀行需要根據支票的號碼對支票排序;

例2:在乙個繪製互相重疊的圖形物件的程式中,可能需要根據乙個「在上方」關係將各物件排序,以便自下而上地繪出物件。

例3:在乙個由n個數構成的集合上,求集合中第i小/大的數。

例4:對乙個含有n個元數的集合,求解中位數、k分位數。

實驗目的

基於教材內容,任選兩種排序演算法,實現並比較效能。

基本要求

(1)至少要有一種排序演算法的效能優於o(n2)

(2)對實現的排序演算法進行實驗比較,實驗比較資料參見教材7.8章節

(3)排序演算法要基於教材,測試輸入的整數資料檔案(5個,檔案中資料規模分別是100,1k,10k,100k和1m),排序結果也要輸出到檔案中。

(4)要在螢幕上輸出排序過程所花費時間

**實現

#include#include#includeusing namespace std;

large_integer frequency;

int a[1000001],temp[1000001];

int count=0;

void init(ifstream &infile)

}void print(ofstream &outfile)

while(lright)

a[curr]=temp[i1++];

else if(cmp(temp[i1],temp[i2]))

a[curr]=temp[i1++];

else 

a[curr]=temp[i2++];

}} int main()

{    ifstream test_100("100.txt"); 

ifstream test_1k("1k.txt"); 

ifstream test_10k("10k.txt"); 

ifstream test_100k("100k.txt"); 

ifstream test_1m("1m.txt");

ofstream output_100("output_100.txt");

ofstream output_1k("output_1k.txt");

ofstream output_10k("output_10k.txt");

ofstream output_100k("output_100k.txt");

ofstream output_1m("output_1m.txt");

double dff,begin,end,dfm,dft;

init(test_100);

queryperformancefrequency(&frequency);//獲得時鐘頻率

dff=(double)frequency.quadpart;

queryperformancecounter(&frequency);//獲得初始值

begin=frequency.quadpart;

qsort(a,0,100);

queryperformancecounter(&frequency);//獲得終止值

end=frequency.quadpart;

dfm=(double)(end-begin);

dft=dfm/dff;

print(output_100);

cout<< "快速排序100:"《完整**及輸入輸出樣例:

資料結構實驗八 排序

實驗八 排序 實驗目的 掌握直接插入排序演算法 理解其演算法原理和適用情況。實驗內容 1.構建乙個陣列,包含n個待排序的資料 2.0號單元不用,用於存放監視哨 3.通過比較和移動實現資料排序,並輸出 4.估計演算法的時間複雜性。原始碼 include stdafx.h include using n...

實驗八 排序演算法的實現 資料結構

1.掌握常用的排序方法,並掌握用高階語言實現排序演算法的方法 2.深刻理解排序的定義和各種排序方法的特點,並能加以靈活應用 3.了解各種方法的排序過程及其時間複雜度的分析方法。實驗在計算機機房,應用軟體vc 統計成績 給出n個學生的考試成績表,每條資訊由姓名和分數組成,試設計乙個演算法 1 按分數高...

資料結構 實驗六 排序

本次實驗實現排序中的直接插入 氣泡排序 快速排序 簡單選擇排序 堆排序等排序演算法。下面放一下自己的 include include include datahead.h define maxsize 20typedef intkeytype typedef struct redtype typed...