一.實驗目的
實現常用的排序演算法,加深對這些演算法的理解,以後可以將這些演算法應用到實際問題的解決上。
二.實驗題目
排序是在實際問題中經常用到的演算法,快速、選擇和插入三種排序演算法是排序演算法中最簡單的也是最常用到的,實現這三種演算法,在不同的數值串行上執行,然後比較三種方法的空間複雜度和時間複雜度,分析比較結果,得出選擇這三種排序演算法的一般原則。
三.實現提示
1.待排序列的資料結構描述:
#define maxsize 20 //乙個用作示例的順序表的最大長度
typedef int keytype; //定義關鍵字型別為整數型別
typedef struct
redtype; //記錄型別
typedef struct
sqlist; //順序表型別
2.待排序列應該考慮多種情況,例如基本有序以及基本無序的情況等,這樣才能得到在不同的資料情況下演算法優劣性的比較。
四.思考及選做
1.進一步**其他的排序演算法的比較,得出類似的時間複雜度以及空間複雜度的分析,特別要注意針對不同的演算法,測試資料的結構也要盡可能的豐富。
五.我的實現
(1) 排序演算法的實現
#include#include#define maxsize 20 //乙個用作示例的順序表的最大長度
/*************************************資料結構的定義*************************************/
typedef int keytype; //定義關鍵字型別為整數型別
typedef char infotype;
typedef struct
redtype; //記錄型別
typedef struct
sqlist; //順序表型別
/****************************************功能函式*****************************************/
/* 快速排序.
思想:選定乙個樞紐元素,對待排序序列進行分割,
分割之後的序列乙個部分小於樞紐元素,乙個部分大於樞紐元素,再
對這兩個分割好的子串行進行上述的過程。
總結:平均效率o(nlogn),適用於排序大列表。
此演算法的總時間取決於樞紐值的位置;選擇第乙個元素作為樞紐,可能
導致o(n2)的最糟用例效率。若數基本有序,效率反而最差。選項中間
值作為樞紐,效率是o(nlogn)。基於分治法。
*/ void quicksort(sqlist &l,int l,int h)
(2) 演算法效能比較
#include#include#include //使用當前時鐘做種子
#define maxsize 10000 //乙個用作示例的順序表的最大長度
/*************************************資料結構的定義*************************************/
typedef int keytype; //定義關鍵字型別為整數型別
typedef char infotype;
typedef struct
redtype; //記錄型別
typedef struct
sqlist; //順序表型別
/****************************************功能函式*****************************************/
/* 快速排序.
思想:選定乙個樞紐元素,對待排序序列進行分割,
分割之後的序列乙個部分小於樞紐元素,乙個部分大於樞紐元素,再
對這兩個分割好的子串行進行上述的過程。
總結:平均效率o(nlogn),適用於排序大列表。
此演算法的總時間取決於樞紐值的位置;選擇第乙個元素作為樞紐,可能
導致o(n2)的最糟用例效率。若數基本有序,效率反而最差。選項中間
值作為樞紐,效率是o(nlogn)。基於分治法。
*/ void quicksort(sqlist &l,int l,int h)
{ if (l>=h)
return ;
int j ,i,key;
i=l;
j=h;
key=l.r[i].key;
while(ikey)
j--;
if (i
資料結構 各種排序演算法比較
一,各種排序演算法比較 各種排序演算法比較 二,相關概念 1 穩定排序和非穩定排序 簡單地說就是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序,我們就說這種排序方法是穩定的。反之,就是非穩定的。比如 一組數排序前是a1,a2,a3,a4,a5,其中a2 a4,經過某種排序後為a1,...
資料結構中各種內部排序演算法的比較
20101002 1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分...
資料結構之各種排序的比較
一 直接插入排序 演算法簡潔,但是只有當待排元素n比較少的時候效率才高 所需空間 乙個當前元素的哨兵array 0 即可 最壞的情況 逆序 總的比較次數為n n 1 2,記錄的移動次數也為n n 1 2 最好的情況 正序 比較次數為n 1,記錄移動次數為0 由此可以推斷出插入排序演算法的平均時間為o...