插入排序打印输出错误

时间:2017-07-19 21:08:45

标签: c++ arrays sorting insertion-sort

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

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

但是当我试图运行此代码时,输​​出结果为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和其他网站以获得类似的代码,但我似乎无法找到任何相关内容。

2 个答案:

答案 0 :(得分:2)

替换:

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

由:

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

直到第一个索引才检查,而没有触及第零个索引

您可能想要打印数组的内容,如下所示:

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

答案 1 :(得分:2)

对于初学者来说这个循环

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

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

写出像

这样的语句是正确的
 for (j = 1; j < length; j++) {
      ^^^^^

内循环

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

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

最好不要交换满足条件的每对元素来复制元素,然后写入&#34;添加&#34;元素处于所需位置。

程序可以按以下方式查看。

#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