もちろん、電話インタビュー中にそれを尋ねられました。他の質問は問題ありませんが、それはまだ最善の答えがわかりません.
最初は基数ソートのにおいがすると思っていましたが、隣接するスワップしか使用できないため、もちろん使用できません。
だから私はそれがバブルソートタイプのアルゴリズムだと思います.
私のアルゴは次のようなものになると思います(もちろん、今ではインタビュー中よりも優れたアイデアがあります!)
int index = 0;
while(swapsLeft>0 && index < arrays.length)
{
int smallestIndex = index;
for(int i=index; i < index + swapsLeft)
{
// of course < is not correct, we need to compare as string or "by radix" or something
if(array[i]) < array[smallestIndex]
smallestIndex = i;
}
// if found a smaller item within swap range then swap it to the front
for(int i = smallestIndex; i > index; i--)
{
temp = array[smallestIndex];
array[smallestIndex] = array[index];
array[index] = temp
swapsLeft--;
}
// continue for next item in array
index ++; // edit:could probably optimize to index = index + 1 + (smallestIndex - index) ?
}
それは正しいと思いますか?
より良い解決策として、これを行うための効率的/適切な方法に興味があります。