2017-07-19 93 views
0

我想用下面的代码进行排序的数组: -插入排序打印输出错误

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

但是,当我试图运行这段代码输出出来是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)); 

但我很好奇为什么这段代码不工作,我已经尝试查找维基和其他网站的类似代码,但我似乎无法找到任何相关的。

+1

在'A [1 + 1]'时执行恰好值什么'A [1 + 1] = A [1];'? – Pontifex

+1

***但我很好奇为什么这个代码不工作***为什么你不使用你的调试器。我的意思是逐行浏览代码,查看你的变量。 – drescherjm

+0

@Pontifex它应该交换我已经采取的代码从介绍算法CLRS –

回答

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]<<" "; 
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将永不检查。

最好不要交换满足条件的每一对元素来复制元素,然后在需要的位置写入“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