程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 排序算法-關於冒泡排序法的疑惑

排序算法-關於冒泡排序法的疑惑

編輯:編程綜合問答
關於冒泡排序法的疑惑

冒泡排序法的代碼

        int n=0;
        int temp = 0;
        for (int i = a.length - 1; i > 0; --i) {
            for (int j = 0; j < i; ++j) {
                if (a[j + 1] < a[j]) {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    n++;
                }
            }
        }

由於我是菜鳥,我寫的是這樣的

        int n = 0;
        int temp = 0;
        for (int i = a.length - 1; i > 0; i--) {
            for (int j = i - 1; j >= 0; j--) {
                if (a[i] < a[j]) {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                    n++;
                }
            }
        }

可是我打印出n的值發現冒泡的n值比我寫的那個要大,
比如{2,6,4,7,0,1,3,4,5,8,9,0}
冒泡n==26
下面那個n==21。
很疑惑,為什麼要前後兩個兩個比較,相比下面那種有什麼優勢

最佳回答:


你寫的這種應該叫做選擇排序,每次遍歷選出最大的那個放到最後面,跟冒泡排序有一定的區別,
選擇排序交換次數比冒泡排序較少,由於交換所需CPU時間比比較所需的CPU時間多,n值較小時,選擇排序比冒泡排序快。
原地操作幾乎是選擇排序的唯一優點,當方度(space complexity)要求較高時,可以考慮選擇排序;實際適用的場合非常罕見。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved