【问题标题】:Why does insertion sort break down when I remove Key variable为什么当我删除 Key 变量时插入排序会崩溃
【发布时间】:2021-08-26 13:00:11
【问题描述】:

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

#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。我期待同样的结果,但输出是 [4 4 4 10 12 12 12 12] 这是错误的。为什么会这样?

【问题讨论】:

标签: c++ insertion-sort


【解决方案1】:

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

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

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

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

【讨论】:

  • 它在循环的第一轮中修改它,因为ji-1 开始并向下移动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2012-08-04
  • 1970-01-01
  • 2016-04-24
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多