#include<iostream> #include<ctime> using namespace std; #define MAXSIZE 100 typedef int Elemtype; struct SqList { int size; int r[MAXSIZE+1]; }; void InsertSort(SqList*L) { int i, j; for(i=2;i<=L->size;i++) { if(L->r[i]<L->r[i-1]) { L->r[0] = L->r[i]; for(j=i-1;j>0&&L->r[j]>L->r[0];j--) { L->r[j + 1] = L->r[j]; } L->r[j+1] = L->r[0]; } } } int* RandomArray(int n, int rangeL, int rangeR) { int* arr = new int[n];//创建一个大小为n的数组 srand(time(NULL));//以时间为"种子"产生随机数 for (int i = 0; i < n; i++) { arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;//生成指定区间[rangeL,rangeR]里的数 } return arr; } int main() { int n; cout << "请输入数据规模n: "; cin >> n; int* arr1; arr1 = RandomArray(n, 0, 10000); clock_t start_time1 = clock(); SqList temp; // 定义一个中间变量,用于将随机数组转换成 SqList temp.size = n; for (int i = 0; i < n; i++) { temp.r[i] = arr1[i]; } InsertSort(&temp); clock_t end_time1 = clock(); cout << "直接插入排序耗时:" << (double)(end_time1 - start_time1) / CLOCKS_PER_SEC << "秒" << endl; delete[] arr1; return 0; }这个代码有什么问题?
时间: 2024-01-12 11:03:47 浏览: 75
这段代码的问题在于,它使用了一个未定义的结构体 `SqList`,没有进行结构体的定义和声明。可以将 `SqList` 结构体的定义和声明加入到代码中,例如:
```c++
#include<iostream>
#include<ctime>
using namespace std;
#define MAXSIZE 100
typedef int Elemtype;
struct SqList {
int size;
int r[MAXSIZE + 1];
};
void InsertSort(SqList* L) {
int i, j;
for (i = 2; i <= L->size; i++)
{
if (L->r[i] < L->r[i - 1])
{
L->r[0] = L->r[i];
for (j = i - 1; j > 0 && L->r[j] > L->r[0]; j--)
{
L->r[j + 1] = L->r[j];
}
L->r[j + 1] = L->r[0];
}
}
}
int* RandomArray(int n, int rangeL, int rangeR) {
int* arr = new int[n];
srand(time(NULL));
for (int i = 0; i < n; i++)
{
arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
}
return arr;
}
int main() {
int n;
cout << "请输入数据规模n: "; cin >> n;
int* arr1;
arr1 = RandomArray(n, 0, 10000);
clock_t start_time1 = clock();
SqList temp; // 定义一个中间变量,用于将随机数组转换成 SqList
temp.size = n;
for (int i = 0; i < n; i++)
{
temp.r[i] = arr1[i];
}
InsertSort(&temp);
clock_t end_time1 = clock();
cout << "直接插入排序耗时:" << (double)(end_time1 - start_time1) / CLOCKS_PER_SEC << "秒" << endl;
delete[] arr1;
return 0;
}
```
此外,还有一些小问题:
1. `RandomArray` 函数中的 `arr` 建议使用动态内存分配,以避免数组过大导致栈溢出,需要在函数体中加入 `delete[] arr;`,释放动态分配的内存。
2. `RandomArray` 函数中的随机数生成使用的是 `rand()` 函数,其生成的随机数分布不均匀,有可能会影响算法效率,建议使用 C++11 中的 `random` 库进行随机数生成。
阅读全文