繁体   English   中英

为什么删除 Key 变量时插入排序会崩溃

[英]Why does insertion sort break down when I remove Key variable

最近,我学习了如何使用插入排序。 所以,我开始修改它的代码。

#include<bits/stdc++.h>
using namespace std;
 
int main(void)
{
    int arr[] = {4,3,2,10,12,1,5,6};
    int n = sizeof(arr)/sizeof(arr[0]);

    for(int i=1; i<n; i++)
    {
        int key = arr[i]; // line a
        int j = i-1;

        while(j>=0 && arr[j]>key) //line b
        {
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = key; //line c
    }

    for(int i=0; i<n; i++)
    {
        cout<<arr[i]<<" ";
    }
}

由于 key = arr[i],我删除了“line a”并在“line b”和“line c”处放置了 arr[i] 而不是 key。 我预计结果相同,但 output 是 [4 4 4 10 12 12 12 12],这是错误的。 为什么会这样?

当你做int key = arr[i]; , key 的值保存在变量key中。

当您执行while(j>=0 && arr[j]>arr[i])时,您使用的是arr[i]当前值。 一开始是一样的,但随着while循环的运行,你开始修改arr

arr[j+1] = arr[j];

j+1等于i时,这将最终修改arr[i] 因此,对于循环的进一步迭代,您将检查不同的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM