亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求助,關于算法的時間復雜度問題?該怎么去運用呢

求助,關于算法的時間復雜度問題?該怎么去運用呢

倚天杖 2021-06-02 07:07:20
public static void xxxx(int [] a)for (int i = 0; i < a.length - 1; i++) {int posMin = i;for (int k = i + 1; k < a.length; k++) {if (a[posMin] > a[k]) posMin = k;}if (posMin != i) swap(a, i, posMin);}}請問一下這個算法的時間復雜度是多少? 每一個循環分別是多少? 并且說一下為什么..謝謝!!
查看完整描述

2 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

這個算法的時間復雜度是O(a.length^2)
當i = 0;子循環執行a.length-1
當i = 1;子循環執行a.length-1-1

當i = j;子循環執行a.length-1-j次
依次類推把它們加起來:知這個算法的時間復雜度是O(a.length^2)

查看完整回答
反對 回復 2021-06-07
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

內循環
for (int k = i + 1; k < a.length; k++) //O(N)// N=a.length;
{
if (a[posMin] > a[k]) //一次比較 合計 N-1次比較
posMin = k; // 0 ~1 次賦值 合計 0~ N-1次賦值
}

外循環
0~1 次交換(每個交換3次賦值) 總計1~N-1次 最差N-1次交換
平均的為 O(N^2)
如果,最多N-1次交換
每一輪內循環,進行了N-1次比較;
總的比較次數為 (N-1) *(N-1) =(N-1)^2
所以為O(N^2)
改進的內循環
for (int k = i + 1; k < a.length; k++) //O(N)// N=a.length;
{
if (a[posMin] > a[k]) //一次比較 合計 N-1次比較
posMin = k; // 0 ~1 次賦值 合計 0~ N-1次賦值

else break;
}

改進的也為O(N^2),但是實際運行,比原來要快多了!因為 排好序時為O(N),內循環,只進行一次比較;接近排好序的也要快得多,只有接近逆序的才是O(N^2)



查看完整回答
反對 回復 2021-06-07
  • 2 回答
  • 0 關注
  • 423 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號