typedef struct 可以 换成 struct,试了下也对
typedef struct {
int key;
char *otherinfo;
} Node;
//顺序表的存储结构
typedef struct {
Node *r; //存储空间的基地址
int length; //顺序表长度
} SqList; //顺序表类型
--------换成---:
struct Node{
int key;
char *otherinfo;
};
//顺序表的存储结构
struct SqList{
Node *r; //存储空间的基地址
int length; //顺序表长度
};
#include <stdio.h>
#include <iostream>
#include <stdlib.h> // 随机函数rand()需要的头文件
#include <time.h>
using namespace std;
#define MAXSIZE 2000000 //顺序表的最大长度
typedef struct {
int key;
char *otherinfo;
} Node;
//顺序表的存储结构
typedef struct {
Node *r; //存储空间的基地址
int 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) { //"<",需将r[i]插入有序子表
L.r[0] = L.r[i]; //将待插入的记录暂存到监视哨中
L.r[i] = L.r[i - 1]; //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]; //将r[0]即原r[i],插入到正确位置
}
}
}
//二分插入排序
void BInsertSort(SqList &L) {
int i, j, m, low, high;
for (i = 2; i <= L.length; i++) {
L.r[0] = L.r[i];
low = 1;
high = i - 1;
while (low <= high) {
m = (low + high) / 2;
if (L.r[0].key < L.r[m].key) {
high = m - 1;
}
else {
low = m + 1;
}
}
for (j = i - 1; j >= high + 1; j--) {
L.r[j + 1] = L.r[j];
}
L.r[high + 1] = L.r[0];
}
}
int main() {
SqList L;
L.r = new Node[MAXSIZE + 1];
int n, i, j;
printf("请输入元素个数:\n");
cin >> n;
L.length = n;
clock_t start1, finish1;
start1 = clock();
{
for (i = 1; i <= n; i++) {
L.r[i].key = rand();
}
InsertSort(L);//直接插入排序
}
finish1 = clock();
double time1 = (double)(finish1 - start1) / CLOCKS_PER_SEC;
printf("直接插入排序运行时间为:%lf seconds \n", time1);
clock_t start2, finish2;
start2 = clock();
{
for (i = 1; i <= n; i++) {
L.r[i].key = rand();
}
BInsertSort(L);//二分插入排序
}
finish2 = clock();
double time2 = (double)(finish2 - start2) / CLOCKS_PER_SEC;
printf("二分插入排序运行时间为:%lf seconds \n", time2);
return 0;
}