排序演算法時間測試比較

2022-05-13 15:05:09 字數 4119 閱讀 7759

之前介紹過常見的排序演算法,可以檢視

這裡之前實現的**都是針對int型的演算法,現在我將**改寫成了模板,這樣可以應用於常見的一些型別。

為了測試比較不同的排序演算法,採用了兩種計時方式。注意,

下面的兩段**中,void(*_sort)(t*,int) 是函式指標陣列。

1. 採用clock函式,統計排序演算法所使用的時鐘數

**如下:

template 

void clock_test()

;int len=sizeof(_sort)/sizeof(_sort[0]);

clock_t start,finish;

//cout<

cout<

鐩存帴鎻掑靉\t鎶樺崐鎻掑靉\t寧屽皵鎺掑簭\t

"for(int k=100;k<=100000;k+=step)

cout

\t';

for(int i=0;i'

\t';

cout部分測試輸出如下:

2. 利用ftime函式,具體介紹見這兒

**如下:

template 

void time_test()

;int len=sizeof(_sort)/sizeof(_sort[0]);

struct timeb ts1,ts2;

time_t t_sec,t_ms,ti;

cout<

鐩存帴鎻掑靉\t鎶樺崐鎻掑靉\t寧屽皵鎺掑簭\t

"for(int k=100;k<=100000;k+=step)

cout部分測試輸出如下:

最終的全部**如下:

view code

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define timeb timeb

#define _func cout<<__function__>

cout

namespace std;

const

char *const red = "

\033[0;40;31m

";const

char *const green= "

\033[0;40;32m

";const

char *const normal = "

\033[0m

";template 

void insert_sort(t a,int n)

a[j+1]=t;}}

template 

void binary_insert_sort(t a,int n)

for(int j=i;j>mid;j--)

a[j]=a[j-1];

a[low]=t;}}

template 

void shell_sort(t a,int n)

if(gap>1)

gap/=2;}}

template 

void shell_sort2(t a,int n)

gap/=2;}}

template 

void select_sort(t a,int n)

}template 

void select_sort3(t a,int n)

}template 

void adjust(t b,int m,int n)

}template 

void heap_sort(t a,int n)

}template 

void bubble_sort(t a,int n)

template 

void bubble_sort2(t a,int n)

}template 

void qsort(t a,int l,int r)

}if(j>l)

qsort(a,l,j);

if(iclass t>

void quick_sort(t a,int n)

template 

void merge(t a,t b,int l,int m,int r)

while(i<=m)

b[k++]=a[i++];

while(j<=r)

b[k++]=a[j++];

for(int s=l;s<=r;s++)

a[s]=b[s];

}template 

void msort(t a,t b,int l,int r)

}template 

void merge_sort(t a,int n)

template 

void merge_pass(t x,t y,int s,int n)

if(i+s1,n-1);

else

for(int j=i;j<=n-1;j++)

y[j]=x[j];

}template 

void merge_sort2(t a,int n)

st.push_back(n-1);

t *b=new t[n];

int l,m,r;

l=0;

if(!st.empty())

while(!st.empty())

delete  b;

}template 

void merge_sort4(t a,int n)

pos[k++]=n-1;

t *b=new t[n];

int l,m,r;

l=0;

int p=0;

if(pwhile(pclass t>

void rank(t arr,int n,int r)}}

template 

void rank_sort(t arr,int n)

}delete r;

}template 

void rank_sort2(t a,int n)

if(dreturn d;

}void radix_sort(int a,int n)

for(int i=1;i<10;i++)

count[i]+=count[i-1];

for(int i=n-1;i>=0;i--)

for(int i=0;i10;

}delete temp;

delete count;

}void radix_sort2(int a,int n)   

vectorint> >::iterator ite2;

y.clear();

for(ite2=bin.begin();ite2!=bin.end();++ite2)

x=y;

adix*=10;

}int i=0;

for(ite=x.begin();ite!=x.end();ite++)

a[i++]=*ite;

}template 

void sort_test(void (*_sort)(t*,int))

}template 

void clock_test()

;int len=sizeof(_sort)/sizeof(_sort[0]);

clock_t start,finish;

//cout<

cout<

鐩存帴鎻掑靉\t鎶樺崐鎻掑靉\t寧屽皵鎺掑簭\t

"for(int k=100;k<=100000;k+=step)

cout

\t';

for(int i=0;i'

\t';

cout

void time_test()

;int len=sizeof(_sort)/sizeof(_sort[0]);

struct timeb ts1,ts2;

time_t t_sec,t_ms,ti;

cout<

鐩存帴鎻掑靉\t鎶樺崐鎻掑靉\t寧屽皵鎺掑簭\t

"for(int k=100;k<=100000;k+=step)

cout

演算法基礎篇 線性時間非比較排序演算法

注 關於非線性時間得比較排序演算法請看我得另一篇部落格 主要思想 獲取待排序陣列得最大值和最小值,然後開闢乙個從最小值到最大值得連續的陣列,該陣列陣列頭是最小值,陣列尾是最大值。根據陣列中數字相對於最小值最大值的大小儲存在相應得位置。所以該演算法適合進行整數得排序,有理數排序不太適用。def cou...

排序演算法比較

本章中已經研究並仔細分析了多個內部排序方法。對於這些內部排序方法之間的比較,主要從以下幾個方面綜合考慮 時間複雜度 空間複雜度 演算法穩定性 演算法簡單性 待排序記錄數 n的大小 記錄本身的資訊量等。選擇n 個整數組成一些隨機排序,各種內部排序方法的實際時間如圖 7 10 所示。從時間複雜度看,所有...

排序演算法比較

排序方法 最好時間 平均時間 最壞時間 輔助儲存 穩定性備註 簡單選擇排序 o n2 o n2 o n2 o 1 不穩定n小時較好 直接插入排序 o n o n2 o n2 o 1 穩定大部分已有序時較好 氣泡排序 o n o n2 o n2 o 1 穩定n小時較好 希爾排序 o n o nlogn...