これは私の宿題の一部です。
以下のストランドソートの疑似コードが与えられました。
define strandSort( L )
result = []
while len(L) > 0
inorder = []
remove first element of L, add it to inorder
for each item i in L:
if i >= last item in inorder
remove i from L, add it to inorder
result = merge(inorder,result)
return result
次のようにプログラムにコードを実装しました。
public List<Integer> strandSort(List<Integer> nums) {
List<Integer> result = new ArrayList<Integer>();
while(nums.size() > 0){
List<Integer> inorder = new ArrayList<Integer>();
int toAdd = nums.remove(0);
inorder.add(toAdd);
for(Integer i : nums){
if (i >= inorder.get(0) ){
toAdd = nums.remove((int)i);
inorder.add(toAdd);
}
}
result = merge(inorder, result);
}
return result;
ただし、「 for(Integer i : nums) 」行で範囲外エラーが発生します。なぜこれが起こっているのかがわかると思います。リストから要素を削除しながら、リストを反復処理しようとしています。
よくわからないのは、それを修正する方法です。疑似コードを正しく実装していれば、このようなエラーが発生することはないと思います。したがって、私はそれを正しく実装していないと考えています。
もしそうなら、入力リストを破壊せずに StrandSort コードを作り直す最良の方法は何ですか?
(二重投稿で申し訳ありません。説明が終わる前に誤って質問を送信してしまいました!)