2 D配列の行列を増やして、K番目の小さい数を見つけます


この問題は前に長い間考えていたが,考えが間違っていたので,ずっとうまく解決できなかったので,今晩一つの案を見て,急に茅塞顿が開いた.
まずコードを貼る
int min = a[0][0];
int minOfRows[rows];

for(i = 0; i < rows; i++)
    minOfRows[i] = 0;

minOfRows[0] = 1;
	
for(i = 1; i < k; i++)
{
    min = INT_MAX;
    for(j = 0; j < rows; j++)
    {
        if (minOfRows[j] < cols)
        {
            if(a[j][minOfRows[j]] < min)
            {
                min = a[j][minOfRows[j]];
                r = j;
            }
        }		
    }
    minOfRows[r]++;	
}

問題を解く構想.
1)配列全体をkスキャンする
2)スキャンごとに各行の最小要素をパッケージして比較し,今回の比較の最小値minを探し出し,今回見つけた要素師がi行j列目であれば,では、i行目の次の比較はj+1から始まります(例えば、1回目のスキャンの最小値が0行の0列要素であれば、2回目のスキャン0行目の0列要素は除外され、0行目は1列目から比較されます)
3)K回目のスキャン後,得られたminは配列全体であった.
思想の出所.
http://www.careercup.com/question?id=14880812
http://www.careercup.com/question?id=14875828
http://www.careercup.com/question?id=14766667