C語言求陣列中第二小的數的下標,C語言 求一個陣列中第二小的數的下標

時間 2021-07-21 03:30:33

1樓:匿名使用者

滿意答案是錯誤的,時間和空間複雜度過高,正確答案如下:

對n個數兩兩比較,看成是比賽,最後得出冠軍和亞軍即可,即a[0] vs a[1], a[2] vs a[3],... 最後還有多的就輪空,每次比較的較小值「獲勝」進入下一輪;

對「獲勝」者繼續上述兩兩比較,知道最後決出「冠軍」,這就是n個數的最小值。

我想很容易得知,這樣得到最小值共進行了 n-1 次比較操作。

關鍵是:第二小的數一定是所有與最小值進行過比較的那些數中間的最小值(第二小的一定是曾經被冠軍打敗過的)。由於最小值一共進行了 log n次比較,因此我們有 log n個candidates.

從這麼多數裡找最小值需要的比較次數當然是 log n-1。

總共需要的比較次數因此是 n + log n - 2上面的光排序就需要n*logn了

2樓:匿名使用者

#include

#define n 5

int main()

if(min==0) //排除特殊情況,smin賦初值的時候不能與min相同

smin=1;

else

smin=0;

for(i=1;i

printf("%lf",num[smin]);

return 0;}

3樓:匿名使用者

這個您試一下:

#include

main()

i++;

}if(i==8)

printf("所有數相同");

else

else if(a[i]<

兩種方法都可以,希望能夠幫到您。

4樓:

你可以這樣做,首先,你定義兩個陣列,一個陣列用來儲存原資料(我們將它標記為陣列a),另一個陣列用來儲存排序(從小到大)後的資料(我們將它標記為陣列b),我們把陣列a排序後的結果放到陣列b中,然後取出陣列b中的第二個元素(即b[1]),去與陣列a中的資料做比較,就可以找出第二小的資料在原陣列中的位置了~~~~

我個人認為,給你個解題的思路,讓你自己去寫**,勝過於直接給你**……

如果你想要**的話,可以跟我講下,我幫你寫~~~但是,我認為這對你沒有任何幫助~~

5樓:匿名使用者

#include

void main()

for(i=0;i<10;i++)

if(m>a[i]&&a[i]>n)

printf("%d",k);}

c語言 找出陣列10個數裡第二大的數和原始下標 不知道**錯了 求大神幫忙

6樓:匿名使用者

看不懂你寫的**邏輯,但是一個明顯的問題就是不能做值的交換,否則原始回

下標的位置就對不

答上了。給你段驗證過的**:

#include

int main()

if(a[0] > a[1])

else

for(i = 2; i < 10; i++)else if(a[i] > a[max2])max2 = i;

}printf("第二大的數下標是:%d 值是:%d\n", max2, a[max2]);

return(0);}

c語言程式設計:陣列a中放n個整數,試求陣列中最大元素和第二大元素的下標,並輸出相應元素的值

7樓:匿名使用者

是一維陣列還是多維陣列?#includevoid main() max=a(0); for (i=0;i<5;i++) }printf("最大數為%d,下標為:%d\n",max,foot); cmax=a(0); for (i=0;icmax) } for(j=foot+1;j<5;j++) }printf("第二大數是%d,下標為:

%d\n",cmax,cfoot);}

8樓:匿名使用者

#include

int main()

else if(a[i]>m2) } printf("最大的數是%d,下標是%d\n第二大的數是%d,下標是%d\n",m1,i1,m2,i2);

return 0;}

c語言陣列中括號的問題,C語言陣列中括號的問題

函式形參中int sorce其實相當於int sorce,所以是指標而不是陣列,不信你可以在函式內改變形參sorce的值,而陣列是不可以重新賦值的。c 是不接受陣列作形參的。 可以在定義陣列的時候直接賦值,那樣就可以省略了列如 int a 陣列定義時必須確定長度,系統才知道給它分配多少記憶體。陣列作...

在c語言中,將數插入陣列中的程式怎麼寫

有一個已排好序 從大到小 的陣列有5個元素,從鍵盤輸入一個數,要求按原排序的規律將它插入到陣列中 5 i if x2.j i 當這個數比當前數小時,用j記住當前位置,即j i,中斷迴圈。比當前數大時繼續下一個 小應當在左側,大則在右側 3.break for i 5 i j i a i 1 a i ...

c語言如何求數的階乘,c語言如何求一個數的階乘

果果和糰子 n的階乘就是從1到的累積,所以可以通過一個for迴圈,從1到n依次求積即可。include stdio.h int main int n,i,s 1 scanf d n for i 1 i n i for迴圈求累積s s i printf d n s return 0 執行結果 例如求5...