插入排序打印错误输出

Insertion Sort Printing Wrong Output

我正在尝试使用以下代码对数组进行排序:-

预期的输出应该是一个按升序排列的数组。

但是当我尝试 运行 这段代码时,输​​出结果是 59(6 次)

我试过调试它在第一个数组声明处添加了一个监视并在第一个 for 循环中添加了一个断点它给出的错误是:-

->->error-begin 
A syntax error in expression, near `A[6]={31,41,59,26,41,58}'.
#include<iostream>
using namespace std;
int main()
{
    int A[6]={31,41,59,26,41,58};;
int j;
int length = 6;
    for(j=2;j<length;j++)
    {
        int key;
        key = A[j];
        int i;
        i=j-1;
        while(i>0 && A[i]>key)
        {
            A[i+1]=A[i];
            i=i-1;
        }
    A[i+1]=key;
cout<<A[j];

    }


return 0;
}

更新:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int A[6] = { 31, 41, 59, 26, 41, 58 };
    int temp;
    int j;
    int length = 6;
    for (j = 2; j < length; j++) {
        int key;
        key = A[j];
        int i;
        i = j - 1;
        while (i > 0 && A[i] > key) {
            temp = A[i + 1];
            A[i + 1] = A[i];
            A[i] = temp;
            i = i - 1;
        }
        A[i + 1] = key;
    }
    cout << A[j];

    return 0;
}

它的工作应该像我知道的冒泡排序

std::sort(std::begin(A), std::end(A));

但我很好奇为什么这段代码不起作用,我已经尝试在 wiki 和其他网站上查找类似代码,但我似乎找不到任何相关内容。

替换:

while(i>0 && A[i]>key)

作者:

while (i >= 0 && A[i] > key)//notice the equality sign!

它只是检查到第 1 个索引,而没有触及第 0 个索引

您可能想像这样打印数组的内容:

for(int i=0;i<6;i++)
    cout << A[i]<<" ";

对于初学者这个循环

 for (j = 2; j < length; j++) {
      ^^^^^

初始设置不正确。它不会对只有两个元素的数组进行排序,或者如果第二个元素小于第一个元素,第二个元素将永远不会与第一个元素交换。

这样写语句是正确的

 for (j = 1; j < length; j++) {
      ^^^^^

内循环

while (i > 0 && A[i] > key) {
由于条件 i > 0

没有触及元素 A[0],因此永远不会检查子条件 A[0] > key

与其交换满足条件的每一对元素,不如只复制元素,然后在需要的位置写入"added"元素

程序可以如下所示。

#include <iostream>

int main()
{
    int a[] = { 31, 41, 59, 26, 41, 58 };
    const size_t N = sizeof(a) / sizeof(*a);

    for (int x : a) std::cout << x << ' ';
    std::cout << std::endl;

    for (size_t i = 1; i < N; i++)
    {
        int value = a[i];
        size_t j = i;

        for (; j != 0 && value < a[j - 1]; --j)
        {
            a[j] = a[j - 1];
        }

        if (j != i) a[j] = value;
    }

    for (int x : a) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

程序输出为

31 41 59 26 41 58
26 31 41 41 58 59