[英]Comparison of insertion sort and bubble sort
我試圖找出這兩種算法執行的實際時間,發現與許多地方的互聯網信息不一致,這表明插入排序更好。 但是,我發現氣泡排序的執行速度更快。 我的代碼如下。
for(int j = 0; j < a.length - 1; j++){
for(int i = 0; i < a.length - 1 - j; i++) {
count++;
if(a[i] > a[i+1]){
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
for(int i = 1; i < a.length; i++){
for(int j = i - 1; j >= 0; j-- ){
if(a[j] > a[i]) {
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
我以此計算了開始時間和結束時間。
long startTime = System.currentTimeMillis();
.....your program....
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println(totalTime);
我發現,插入排序的10次運行平均時間為13次,氣泡排序的平均時間僅為5次。對此有什么解釋嗎?
您實施的插入排序錯誤。 本來應該是插入排序的代碼甚至沒有對數組排序; 例如,在輸入上嘗試
int a[] = {4, 2, 3, 1, 5};
給出輸出
[2, 3, 1, 4, 5]
觀看演示: http : //ideone.com/aFCPft
鑒於代碼無法正常工作,時序數據並不能告訴我們太多信息。
您要排序多少個元素? 只是為了確保不會產生晦澀的固定成本,我通常會采用longint.max元素進行這些測試。 另外,如果您對元素排序不足,則可能是由於某種原因,此時CPU處於繁忙狀態。 如果元素更多,那么錯誤源就不那么重要了。
但是,聽起來很奇怪。 也許對愚蠢的循環有一些編譯器優化對優化的循環不起作用?
出於好奇:您嘗試使用32位和64位應用程序嗎? 有時結果可能會有所不同:O
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.