資料結構實驗4 排序演算法的實現及效能分析

2021-09-07 11:50:58 字數 3683 閱讀 3337

實現了選擇排序, 插入排序, 氣泡排序, 高速排序, 改進後的高速排序, 以及兩路合併排序.

通過隨機函式隨機生成100個數, 進行各種排序, 記錄排序開始時間以及結束時間, 計算消耗的時間來比較演算法的優略.

實現**:

#include "iostream"

#include "cstdio"

#include "cstring"

#include "algorithm"

#include "queue"

#include "stack"

#include "cmath"

#include "utility"

#include "map"

#include "set"

#include "vector"

#include "list"

#include "string"

#include "cstdlib"

#include "ctime"

using namespace std;

typedef long long ll;

const int mod = 1e9 + 7;

const int inf = 0x3f3f3f3f;

const int maxn = 1005;

template void selectsort(t a, int n)

}template void insertsort(t a, int n)

a[j] = tmp; }}

template void bubblesort(t a, int n)

i = last; }}

template void qsort(t a, int left, int right)

while(i < j);

swap(a[left], a[j]);

qsort(a, left, j - 1);

qsort(a, j + 1, right); }}

template void quicksort(t a, int n)

template void magicqsort(t a, int left, int right)

while(i < j);

swap(a[left], a[j]);

magicqsort(a, left, j - 1);

magicqsort(a, j + 1, right);

} }else

}template void magicquicksort(t a, int n)

template void merge(t a, int i1, int j1, int i2, int j2)

while(i <= j1) tmp[k++] = a[i++];

while(j <= j2) tmp[k++] = a[j++];

for(int i = 0; i < k; ++i)

a[i1++] = tmp[i];

delete tmp;

}template void mergesort(t a, int n)

size *= 2;

}int main(int argc, char const *ar**)

cout << endl;

start = clock();

selectsort(a, n);

cout << "經過簡單選擇排序後的序列為:" << endl;

for(i = 0; i < n; ++i)

cout << a[i] << " ";

cout << endl;

finish = clock();

cout << "開始時間為:" << start << " " << "結束時間為:" << finish << " " << "持續時間為:" << (double)(finish - start)/ clocks_per_sec << endl;

start = clock();

insertsort(b, n);

cout << "經過直接插入排序後的序列為:" << endl;

for(i = 0; i < n; ++i)

cout << b[i] << " ";

cout << endl;

finish = clock();

cout << "開始時間為:" << start << " " << "結束時間為:" << finish << " " << "持續時間為:" << (double)(finish - start)/ clocks_per_sec << endl;

start = clock();

bubblesort(c, n);

cout << "經過氣泡排序後的序列為:" << endl;

for(i = 0; i < n; ++i)

cout << c[i] << " ";

cout << endl;

finish = clock();

cout << "開始時間為:" << start << " " << "結束時間為:" << finish << " " << "持續時間為:" << (double)(finish - start)/ clocks_per_sec << endl;

start = clock();

quicksort(d, n);

cout << "經過高速排序後的序列為:" << endl;

for(i = 0; i < n; i++)

cout << d[i] << " ";

cout << endl;

finish = clock();

cout << "開始時間為:" << start << " " << "結束時間為:" << finish << " " << "持續時間為:" << (double)(finish - start)/ clocks_per_sec << endl;

start = clock();

mergesort(e, n);

cout << "經過兩路合併排序後的序列為:" << endl;

for(i = 0; i < n; i++)

cout << e[i] << " ";

cout << endl;

finish = clock();

cout << "開始時間為:" << start << " " << "結束時間為:" << finish << " " << "持續時間為:" << (double)(finish - start)/ clocks_per_sec << endl;

start = clock();

magicquicksort(f, n);

cout << "經過改進後的高速排序後的序列為:" << endl;

for(i = 0; i < n; ++i)

cout << f[i] << " ";

cout << endl;

finish = clock();

cout << "開始時間為:" << start << " " << "結束時間為:" << finish << " " << "持續時間為:" << (double)(finish - start)/ clocks_per_sec << endl;

return 0;

}

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

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

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

背景 排序是計算機內經常進行的一種操作,其目的是將一組 無序 的記錄序列調整為 有序 的記錄序列。假設含n個記錄的序列為 其相應的關鍵字序列為 這些關鍵字相互之間可以進行比較,即在它們之間存在著這樣乙個關係 kp1 kp2 kpn 按此固有關係將上式記錄序列重新排列為的操作稱作排序。排序演算法是電腦...

資料結構實驗八 排序

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