

挿入ソートについて学習しており、一つ疑問があるのですが、なぜ `temp` の変数を使わなけばならないのでしょうか？

[挿入ソート | Programming Place Plus アルゴリズムとデータ構造編](https://programming-
place.net/ppp/contents/algorithm/sort/004.html)

**正しい挙動のコード:**

[code]

    　　int arry[] = {5,2,8,3,1};
    
        for (int i = 1; i < 5; i++)
        {
    　　　　int temp = arry[i];
            int j = i - 1;
            while ((j >= 0) and (arry[j] > temp))
            {
                arry[j + 1] = arry[j];
                j = j - 1;
            }
            arry[j + 1] = temp;
        }
    
        for (int i = 0; i < 5; i++)
        {
            cout << arry[i];
        }
    
[/code]

下記のように `temp` 変数を使わずそのまま `while` の条件文で配列にアクセスしようとすると、正しい挙動を確認することが出来ません。  
是非ご教授お願い致します。

**tempを使わないコード:**

[code]

    for (int i = 1; i < 5; i++)
        {
    　　    //int temp = arry[i];
            int j = i - 1;
            while ((j >= 0) and (arry[j] > arry[i]))
            {
                arry[j + 1] = arry[j];
                j = j - 1;
            }
            arry[j + 1] = arry[i];
        }
    
[/code]


CC BY-SA 4.0
2022-09-09T11:48:43.550
91015
2022-09-10T04:18:38.833
2022-09-10T04:18:01.083
3060
47147
question
c++ アルゴリズム
C++で挿入ソートを実装する際、一時変数の役目が分からない


自分で解答がわかりました。

変数に一時退避しておかないと、上書きされてしまうからでした。


CC BY-SA 4.0
2022-09-09T12:45:19.540
91018
2022-09-10T04:18:38.833
2022-09-10T04:18:38.833
3060
47147
91015
answer