这段代码有什么错误,怎么改正:#include<iostream> using namespace std; #define maxsize 100 #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; #define MAXSIZE 100 //最大长度 typedef int KeyType;//关键字类型 typedef struct {//“记录类型 ”的意思 KeyType key; //InfoType otherinfo; }RedType; typedef struct {//“记录类型 ”的意思 RedType r[maxsize + 1];//数组//r[0]不用,是哨兵圣盾 int length;//长度 }SqList; ///////////////////////////////////////////////插入排序////////////////////////////////////////////////////////////// void InsertSort(SqList &L){ int i, j; for(i = 2; i <= L.length;i ++) if(L.r[i].key < L.r[i - 1].key){ L.r[0] = L.r[i]; L.r[i] = L.r[i - 1]; for(j = i - 2; 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 SA; cin >> SA.length; InsertSort(SA); /* for(int i = 2; i <= 6;i ++){ for(int j = i; j <= 6 - i; j ++) cout << SA.r[j].key << " "; } */ cout << SA.r[2].key; return 0; }
时间: 2023-08-23 16:06:36 浏览: 141
这段代码有两个错误:
1. 在调用 InsertSort 函数之前,未初始化 SqList 结构体中的元素,即未给 length 赋值。
2. 在 InsertSort 函数中的第 11 行,循环条件应为 L.r[0].key < L.r[j].key,而不是 L.r[0].key < L.r[j]。
修改后的代码如下:
```
#include<iostream>
using namespace std;
#define maxsize 100
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
#define MAXSIZE 100 //最大长度
typedef int KeyType;//关键字类型
typedef struct {
KeyType key;
}RedType;
typedef struct {
RedType r[maxsize + 1];
int length;
}SqList;
///////////////////////////////////////////////插入排序//////////////////////////////////////////////////////////////
void InsertSort(SqList &L){
int i, j;
for(i = 2; i <= L.length; i++){
if(L.r[i].key < L.r[i - 1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i - 1];
for(j = i - 2; 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 SA;
cin >> SA.length;
for(int i = 1; i <= SA.length; i++){
cin >> SA.r[i].key;
}
InsertSort(SA);
cout << SA.r[2].key;
return 0;
}
```
修改后的代码在输入数组元素之后,调用了 InsertSort 函数,对数组进行排序,并输出第三个元素的值。
阅读全文