「求一列數中的第二小的數」

2021-07-06 03:39:07 字數 1147 閱讀 2277

問題:求一列數中的第二小的數

方法:分治法,二分法,每次保留最小的兩個資料

#include

#include

#include

float a[100];

void two (int i, int j, float &fmin2, float &fmin1)

else if (i==j-1)

if (a[i]

float second (int n)

int main( )

;void swap(int &x, int &y)

int select(int  a[ ], int left, int right, int k)  //在a [ left : right ]中選擇第k小的元素/

while (a[i] < pivot && i<5);

do while (a[j] > pivot && j<6); // 在右側尋找<= pivot 的元素

printf("i= %d, j= %d \n",i, j);

printf("交換前  i= %d j=%d a[%d]= %d a[%d]= %d\n", i, j, i, a[i], j, a[j]); 

if (i >= j)   break;         // 未發現交換物件

swap(a[i], a[j]);

printf("交換後   i= %d j=%d a[%d]= %d a[%d]= %d\n", i, j, i, a[i], j, a[j]);

for (int i=0; iif (j - left + 1 == k)  

return  pivot;

printf("第二次交換後:\n");

for (int i=0; i

printf("@@@@@@@  \n");

for (int i=0; i

int main( )

;   // 1 2 3 4 5 7;       

if (k < 1 || k >n)   

printf("input error!\n");

else

system ("pause");

return 0;              

} 



求n個整數中第二小的數

相同的整數看成乙個數。比如,有5個數分別是1,1,3,4,5,那麼第二小的數就是3。輸入包含多組測試資料。輸入的第一行是乙個整數c,表示有c組測試資料 每組測試資料的第一行是乙個整數n,表示本組測試資料有n個整數 2 n 10 接著一行是n個整數 每個數均小於100 為每組測試資料輸出第二小的整數,...

求出一列數中的「逆序對」

求出一列數中的 逆序對 的個數 所謂 逆序對 就是指數的大小與其在序列中的順序相反的一對數 例 如 3,4,2,1,3 中 逆序對 有 3,2 3,1 4,2 4,1 4,3 這5個 要求時間複雜度為o nlogn include void printtherel int i,int j void ...

找出第二小的數

求n個整數中第二小的數。相同的整數看成乙個數。比如,有5個數分別是1,1,3,4,5,那麼第二小的數就是3。輸入包含多組測試資料。輸入的第一行是乙個整數c,表示有c組測試資料 每組測試資料的第一行是乙個整數n,表示本組測試資料有n個整數 2 n 10 接著一行是n個整數 每個數均小於100 為每組測...