改进以下代码#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define ar arr[]={12,21,2,11,10,8} #define ELEM_TYPE int int ar; //顺序表的创建: typedef struct Sqlist { ELEM_TYPE *data; int length; int SIZE; }Sqlist,*PSqlist; //顺序表的初始化: void Init_Sqlist(PSqlist L) { L->data=arr; L->length=0; L->SIZE=sizeof(arr)/sizeof(arr[0]); } //打印: void Show(PSqlist L) { for(int i=L->length;i<L->SIZE;i++) { printf("%d ",L->data[i]); } printf("\n\n"); } //.选择排序: void SelectSort(PSqlist L) { for(int i=L->length;i<L->SIZE;i++) { int j=i+1; bool tag=true; int min=i; for(j;j<L->SIZE;j++) { tag=true; if(L->data[min]>L->data[j]) { tag=false; min=j; } } if(min!=i) { int tmp=L->data[min]; L->data[min]=L->data[i]; L->data[i]=tmp; } if(!tag && min==i)//当没有发生交换时,说明这时已经有序,直接退出即可 { break; } } } //<6>.主函数: int main() { Sqlist head; Init_Sqlist(&head); printf("初始数据为:"); Show(&head); printf("选择排序后的数据为:"); SelectSort(&head); Show(&head); }
时间: 2023-06-17 21:05:11 浏览: 88
这段代码存在一些问题,我给您改进一下:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义最大长度
typedef struct {
int *data; // 动态数组存储数据元素
int length; // 顺序表当前长度
} SqList;
// 顺序表的创建
void Init_SqList(SqList *L, int arr[], int n) {
L->data = (int *)malloc(sizeof(int) * MAXSIZE); // 动态分配内存
L->length = n;
for (int i = 0; i < n; i++) {
L->data[i] = arr[i];
}
}
// 打印顺序表
void Show(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
// 选择排序
void SelectSort(SqList *L) {
int i, j, min, tmp;
for (i = 0; i < L->length - 1; i++) {
min = i;
for (j = i + 1; j < L->length; j++) {
if (L->data[min] > L->data[j]) {
min = j; // 记录最小值的下标
}
}
if (min != i) {
tmp = L->data[min];
L->data[min] = L->data[i];
L->data[i] = tmp;
} else {
break;
}
}
}
// 主函数
int main() {
int arr[] = {12, 21, 2, 11, 10, 8};
int n = sizeof(arr) / sizeof(arr[0]);
SqList L;
Init_SqList(&L, arr, n);
printf("初始数据为:");
Show(L);
SelectSort(&L);
printf("选择排序后的数据为:");
Show(L);
return 0;
}
```
改进的地方:
1. 定义了一个 `MAXSIZE`,用于限制顺序表的最大长度,并且使用 `malloc()` 动态分配内存。
2. 修改了 `Init_Sqlist()` 函数,使其可以接受一个数组和数组长度作为参数,用于初始化顺序表。
3. 修改了 `Show()` 函数,使其可以接受一个 `SqList` 类型的参数,用于打印顺序表。
4. 修改了 `SelectSort()` 函数,使其使用更加常见的选择排序算法,并且使用更加清晰的变量名。
5. 修改了主函数中的调用方式,使其符合修改后的函数定义。
阅读全文