簡體   English   中英

插入排序和冒泡排序的比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM