問題:求一列數中的第二小的數
方法:分治法,二分法,每次保留最小的兩個資料
#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 為每組測...