注册 登录
编程论坛 数据结构与算法

请帮忙!程序没有错误,但输出的是随机数。该题是数据结构的插入排序。[em01]

林小阮 发布于 2016-09-28 21:46, 1709 次点击
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
typedef  int  keytype;
typedef  char infotype;
const maxsize=20;
typedef  struct
{
      keytype key;//关键字项
      infotype  otherinfo;//其他数据项
}rcdtype;//记录类型
typedef struct
{
      rcdtype r[maxsize+1];//a[0]闲置作为不能别标志的哨兵
      int length;     //顺序表排序的记录空间r[1,length]
}sqlist;// 顺序表类型
void  insertsort(sqlist &l)
{
    //对顺序表l做插入排序
    int i,j;
    for(i=2;i<=l.length;++i)
    {
         if(l.r[i].key<l.r[i-1].key)//当<时,才需要将l.r[i].key插入有序序列中
         {
         l.r[0]=l.r[i];//复制为哨兵
          }
          for(j=i-1;l.r[0].key<l.r[j].key;--j)
          {
         l.r[j+1]=l.r[j];//记录后移
          }
              l.r[j+1]=l.r[0];//插入到正确位置
     }
}
int main()
{
      sqlist l;
      int i;
      l.length=7;
      l.r[1].key=10;l.r[2].key=15;
      l.r[3].key=20;l.r[4].key=30;
      l.r[5].key=25;l.r[6].key=36;
      l.r[7].key=50;
      cout<<"排序后的顺序表:"<<endl;
      insertsort(l);
      for(i=1;i<l.length+1;i++)
      {
          printf("%4d",l.r[i].key);
      }
      cout<<endl<<endl;
      return 0;
1 回复
#2
word1232016-09-29 09:04
if(l.r[i].key<l.r[i-1].key)//当<时,才需要将l.r[i].key插入有序序列中
         {
         l.r[0]=l.r[i];//复制为哨兵
          }
//第一次15>10,if不执行,下面的l.r[0].key没有被赋值,是个随机数
          for(j=i-1;l.r[0].key<l.r[j].key;--j)
          {
             l.r[j+1]=l.r[j];//记录后移
          }
         l.r[j+1]=l.r[0];//插入到正确位置


//当<时,才需要将l.r[i].key插入有序序列中     ----你这里不是写着吗????
if(l.r[i].key<l.r[i-1].key)//当<时,才需要将l.r[i].key插入有序序列中
{
         l.r[0]=l.r[i];//复制为哨兵

           for(j=i-1;l.r[0].key<l.r[j].key;--j)
          {
             l.r[j+1]=l.r[j];//记录后移
          }
         l.r[j+1]=l.r[0];//插入到正确位置
 }
         
1