夜凰 发表于 2016-8-21 16:45:54

插入排序中,把数组元素赋值给整形

1 #include "iostream"
2 using namespace std;
3 int main()
4 {
5         int quote;
6         int a=0;
7         for(int i=0;i<20;i++)
8
9
10         {
11
12         if(cin>>quote)
13               a++;
14               else
15         {
16                         cin.clear();
17                         cin.sync();
18         break;
19         }}
20         for(int j=1;j<a;j++)
21         {
22               int key;
23                  key=quote;
24               int i=j-1;
25               while(i>0&&quote>key){
26                         quote=quote;
27                         i-=1;
28               }
29               quote=key;
30         }
31         int i=0;
32         while(i<=a){
33               cout<<quote<<endl;
34               i++;
35         }
36
37 }

求大神帮我看一下这段代码,是一段简单的插入排序问题。
问题出在23行给key赋值上,给key的第一次赋值总是出错,在调试中确认了quote数组元素正确,j值正确,但是int key=quote却赋出来一个溢出值(大概是4196592

夜凰 发表于 2016-8-21 16:48:39

#include "iostream"
using namespace std;
int main()
{
      int quote;
      int a=0;
      for(int i=0;i<20;i++)
      

      {   

      if(cin>>quote)
                a++;
                else
      {   
                        cin.clear();
                        cin.sync();
      break;
      }}
      for(int j=1;j<a;j++)
      {   
                int key;
                   key=quote;
                int i=j-1;
                while(i>0&&quote>key){
                        quote=quote;
                        i-=1;
                }
                quote=key;
      }   
      int i=0;
      while(i<=a){
                cout<<quote<<endl;
                i++;
      }   
      
}

更正一下代码,这段没有序号

mdgsf 发表于 2016-8-21 17:45:01

#include <iostream>
using namespace std;

int main()
{
        int quote;
        int a=0;
        for(int i=0;i<4;i++)
        {   

                if(cin>>quote)
                        a++;
                else
                {   
                        cin.clear();
                        cin.sync();
                        break;
                }
        }

        for(int j=1;j<a;j++)
        {   
                int key;
                key=quote;
                int i=j-1;
                while(i>=0&&quote>key){
                        quote=quote;
                        i-=1;
                }
                quote=key;
        }   

        printf("a = %d\n", a);
        int i=0;
        while(i < a){
                cout<<quote<<" ";
                i++;
        }   

        getchar();getchar();
        return 0;
}

mdgsf 发表于 2016-8-21 17:49:46

//ai = {1,2,3...,8,9,10}; iStart=0, iEnd=10;
void vInsertionSort(int ai[], int iStart, int iEnd)
{
    int i = 0;
    int j = 0;
    int iTemp = 0;
    for (i=iStart+1; i<iEnd; i++)
    {
      for (j=i; j>iStart; j--)
      {
            if(ai < ai)
            {
                iTemp = ai;
                ai = ai;
                ai = iTemp;
            }
      }
    }
}

iszhuangsha 发表于 2016-8-21 18:05:12

#include <iostream>
using namespace std;
int main()
{
      int quote;
      int a=0;
      for(int i=0;i<20;i++)
                {   

                        if(cin>>quote)
                a++;
            else
                        {
                                cin.clear();
                cin.sync();
                                break;
                        }
                }
      for(int j=0;j<a;j++)
      {   
                int key;
                key=quote;
                int i=j-1;
                while(i>0 && quote>key)
                                {
                        quote=quote;
                        i-=1;
                }
                quote=key;
      }   
      int i=0;
      while(i<a)
                {
                cout<<quote<<endl;
                i++;
      }   
   return 0;   
}

iszhuangsha 发表于 2016-8-21 18:28:58

上面发的有点问题,这下应该没问题了。可以复制运行一下。#include <iostream>
using namespace std;
int main()
{
      int quote;
      int a=0;
      for(int i=0;i<20;i++)
                {   

                        if(cin>>quote)
                a++;
            else
                        {
                                cin.clear();
                cin.sync();
                                break;
                        }
                }
      for(int j=0;j<a;j++)
      {   
                int key;
                key=quote;
                int i=j-1;
                while(i>=0 && quote>key)
                                {
                        quote=quote;
                        i-=1;
                }
                quote=key;
      }   
      int i=0;
      while(i<a)
                {
                cout<<quote<<endl;
                i++;
      }   
   return 0;   
}

夜凰 发表于 2016-8-21 18:30:10

mdgsf 发表于 2016-8-21 17:49


我想知道为什么第一步时把quote赋给key时会出错?

夜凰 发表于 2016-8-21 18:37:38

已解决,谢谢{:10_250:}

紫瞰 发表于 2016-8-21 18:53:11

学习一下
页: [1]
查看完整版本: 插入排序中,把数组元素赋值给整形