[問題] 一陣列判斷最大值及次大值

看板C_and_CPP (C/C++)作者 (見笑轉生氣)時間13年前 (2012/12/02 11:57), 編輯推噓2(2012)
留言14則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C語言 問題(Question): 如題~ 要從一陣列中找出最大值及次大值並相加 痾... 不過這是別人提供讓我參考的XD 所以有些地方不太懂 打在下面了,抱歉我不會用顏色標出來 所以直接打在後面 請各位高人指點迷津 非常感謝!! 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> double max2(int n,double a[]) {double sum; int i,j; double x; for(i=0;i<2;i++) {for(j=i+1;j<3;j++) {if(a[i]<a[j]) {x=a[i]; 以下三行,這個部分不懂 a[i]=a[j]; 我完全不知道在幹嘛... a[j]=x;} } } sum=a[0]+a[1]; 我好像看不出這裡跟上面的迴圈的關係... return sum; 這樣不就是 1.7+2.888 了嗎!? (陣列的值在下面) } int main(void) { double a[3]={1.7,2.888,3.4}; printf("%lf\n",max2(3,a)); return 0; } 感謝解答!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.126.42.146

12/02 11:59, , 1F
以下三行那裏是swap
12/02 11:59, 1F

12/02 11:59, , 2F
上面sort,下面把max跟次max相加
12/02 11:59, 2F
還是看不懂,對不起,可以再詳細一點嗎 >< ※ 編輯: kusou86el 來自: 59.126.42.146 (12/02 13:47)

12/02 13:53, , 3F
google 「選擇排序法」
12/02 13:53, 3F

12/02 14:10, , 4F

12/02 16:32, , 5F
他上面用的是bubble sort
12/02 16:32, 5F

12/02 16:43, , 6F
不太像耶,bubble 是「相鄰兩個比較」一直交換, select 是
12/02 16:43, 6F

12/02 16:43, , 7F
第 i 次選擇後面最大(小) 的做交換到 pos_i.
12/02 16:43, 7F

12/02 21:42, , 8F
那應該是選擇,我比較少用bubble可能我記錯了
12/02 21:42, 8F

12/03 11:34, , 9F
你說看不懂的三行 是在把a[i]跟a[j]的值做交換
12/03 11:34, 9F

12/05 12:39, , 10F
排序需要O(n^2)時間 這應該只需要O(n)時間就好
12/05 12:39, 10F

12/05 12:39, , 11F
有沒有低於O(n)的方法?
12/05 12:39, 11F

12/05 14:52, , 12F
要找到最大最小值一定要走訪陣列, 怎麼可能小於 O(n)
12/05 14:52, 12F

12/05 14:52, , 13F
除非原本那個陣列就有動過手腳才行
12/05 14:52, 13F

12/05 16:54, , 14F
以前好像聽人說過可以小於O(n) 可是那時不好吐他 X(
12/05 16:54, 14F
文章代碼(AID): #1Gkj6WKn (C_and_CPP)
文章代碼(AID): #1Gkj6WKn (C_and_CPP)