練習 不同排序演算法執行時間比較

2021-10-21 18:13:53 字數 3114 閱讀 4665

插入:

template

<

typename

datatype

>

void

insert

(datatype d,

int length)

d[i+1]

= key;

//插入剛剛的key值 注意是i+1}}

//們將d[0]作為哨兵元素,儲存待排序元素

#

include

#include

void

swap

(int

& a,

int& b)

void

bubble

(int a,

int n)

minindext = j;

//此時為交換之後更小的元素的索引

} i = minindext;}}

intmain()

;for

(int i =

0; i <

1000

; i++

)bubble

(a,1000);

for(

int i =

0; i <

1000

; i++

)printf

("time used = %.2f\n",(

double

)clock()

/ clocks_per_sec)

;}

注意:如果不寫swap函式,而是直接在bubble函式中交換兩個數字,發現它們最後並沒有發生交換。

快速排序:

template

<

class

t>

intpartition

(t data,

int p,

int r)

}swap

(data[i+1]

, data[r]);

return i +1;

}template

<

class

t>

void

quicksort

(t data,

int p,

int r)

}int

main()

;for

(int i =

0; i <

1000

; i++

)quicksort

(a,0

,999);

for(

int i =

0; i <

1000

; i++

)printf

("time used = %.2f\n",(

double

)clock()

/ clocks_per_sec)

;}

易錯點:swap(data[i+1], data[r]);

return i + 1;注意是i+1 ,如果寫成i無法排序

我們設定變數p 和r 表示陣列的首尾元素下標,選取陣列最右邊的元素為我們第一次排序的劃界元素,記為s[r]。那麼我們就需要將s[p],s[p+1],…,s[r–1]組成的序列進行子串行劃分

我們設定變數i=p–1,即最前面元素的前乙個,設定變數j = p。反覆執行如下步驟:

(1)執行j+1,如果s[j]≤s[r],交換s[i+1]與s[j]的值,i=i+1,j=j+1;如果s[j]≥s[r],i 不變,j=j+1;

(2)到j=r–1 時,停止步驟(1)。

重複執行上述步驟直至停止後,交換s[i+1]與s[r]的值,劃界元素放在了其最終位置上,其左邊的元素均小於等於它,右邊的元素均大於它。

歸併排序:

void

merge

(int aa,

int b ,

int c,

int lena,

int lenb)

else

if(i == lena)

}else

if(j == lenb)}}

}void

mergesort

(int a,

int n)

int k = n /2;

for(

int j =

0; j < n - n /

2; j++

)mergesort

(b, n /2)

;mergesort

(c, n - n /2)

;merge

(b, c, a, n /

2, n - n /2)

;}}int

main()

;for

(int i =

0; i <

1000

; i++

)mergesort

(a,1000);

for(

int i =

0; i <

1000

; i++

)printf

("time used = %.2f\n",(

double

)clock()

/ clocks_per_sec)

;}

歸併排序是排序兩個已經排序好了的陣列,原陣列要先拆成兩個子陣列,

注意:一定不能遺漏對於i和j達到a或者b末尾的判斷,否則會出現亂碼。當i到達a的末尾,則遍歷b剩下的陣列直接賦給c

跟之前的對比歸併排序時間是最長的。

幾種排序演算法執行時間比較

最近無聊,把各種排序演算法在linux下用c實現了,並記錄其執行時間如下 對10m個無符號隨機整數進行排序,各種演算法的時間如下 qsort c標準庫自帶函式 real 0m5.901s user 0m5.548s sys 0m0.300s merge sort real 0m5.757s user...

一億以上資料幾種排序演算法執行時間比較

執行結果如下圖 單位ms insert 只排了8萬及以下資料 heap 參考演算法導論,maxheapify採用迭代取代遞迴 shell 增量遞減序列採用1 2 3k 1 1 2 3 k 1 1 2 3k 1 形式 shell is incerpi sedgewick提出的增量遞減序列 139137...

flask和django的執行時間比較

flask和django的執行時間比較 flask介面 from flask import flask,request import json defadd args a,b return a b get tasks methods post defget tasks if request.meth...