这段选择排序的代码有什么错误,如何改正:#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 SelectSort(SqList &L) { int i; int k; int j; for(i = 1; i < L.length;++ i) {//只需要排n-1趟,如果多了,就减少一趟,可以不用写等号 k = i; for(j = i + 1; j < L.length;++ j){ if(L.r[j].key < L.r[k].key) k = j; if(k != i){ RedType t = L.r[i]; L.r[i] = L.r[k]; L.r[k] = t; } for(int i = 1; i <= L.length; i++) { cout <<L.r[i].key << " "; } cout << endl; } } } int main() { SqList SA; cin >> SA.length; for(int i = 1; i <= SA.length; i++) { cin >> SA.r[i].key;//对哦,我没有输入元素 } SelectSort(SA); return 0; }
时间: 2023-06-30 22:26:44 浏览: 136
这段选择排序的代码有以下错误:
1. 宏定义 MAXSIZE 与 maxsize 重名。
2. SelectSort函数中的内层循环缺少右括号,导致代码错误。
3. 在内层循环中交换元素的代码应该放在外层循环的结束大括号后面,否则会导致选择排序失败。
修改后的代码如下:
```
#include<iostream>
using namespace std;
#define MAXSIZE 100 //最大长度
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef int KeyType;//关键字类型
typedef struct {
KeyType key;
}RedType;
typedef struct {
RedType r[MAXSIZE + 1];
int length;
}SqList;//不用改变数组元素,不增不减,不用指针
///////////////////////////////////////////////选择排序//////////////////////////////////////////////////////////////
void SelectSort(SqList &L) {
int i;
int k;
int j;
for(i = 1; i < L.length;++ i) {//只需要排n-1趟,如果多了,就减少一趟,可以不用写等号
k = i;
for(j = i + 1; j < L.length;++ j) {
if(L.r[j].key < L.r[k].key) k = j;
}
if(k != i) {
RedType t = L.r[i];
L.r[i] = L.r[k];
L.r[k] = t;
}
for(int i = 1; i <= L.length; i++) {
cout <<L.r[i].key << " ";
}
cout << endl;
}
}
int main() {
SqList SA;
cin >> SA.length;
for(int i = 1; i <= SA.length; i++) {
cin >> SA.r[i].key;//对哦,我没有输入元素
}
SelectSort(SA);
return 0;
}
```
修改后的代码已经可以正确地进行选择排序了。
阅读全文