#include <stdio.h>
#include <stdlib.h>
#include<time.h>
// 定义元素类型为整型
typedef int ElemType;
// 定义静态表结构体
typedef struct{
ElemType *elem; // 动态分配的数组指针
int TableLen; // 表长度
} SSTable;
// 初始化静态表
void STInit(SSTable &ST, int len) {
ST.TableLen = len; // 设置表长度
ST.elem = (ElemType *)malloc(sizeof(ElemType)*ST.TableLen); // 分配内存
int i;
srand(time(NULL)); // 使用当前时间作为随机数种子
for(i = 0; i < ST.TableLen; i++){ // 循环初始化数组元素
ST.elem[i] = rand()%100; // 随机填充元素(0-99)
}
}
// 打印静态表内容
void STPrint(SSTable ST){
for(int i = 0; i < ST.TableLen; i++){
printf("%3d",ST.elem[i]); // 打印元素,右对齐,总宽度为3个字符
}
printf("\n"); // 换行
}
// 定义插入排序函数,参数为一个整型数组指针和数组的长度
void InsertSort(ElemType *A, int n) {
int i, j, insertVal; // 声明用于迭代的索引变量i、j以及待插入的值insertVal
// 从第二个元素开始遍历整个数组(假设第一个元素已经是有序的)
for (i = 1; i < n; i++) {
insertVal = A[i]; // 将当前元素保存到insertVal中
// 寻找insertVal在已排序部分中的正确位置
// 比较并移动大于insertVal的元素向右移一位
for (j = i - 1; j >= 0 && A[j] > insertVal; j--) {
A[j + 1] = A[j]; // 将较大的元素向右移
}
// 当前元素的正确位置找到后,将insertVal插入
A[j + 1] = insertVal;
}
}
int main(){
SSTable ST;
STInit(ST,10); // 初始化静态表,设置长度为10
STPrint(ST); // 打印未排序的静态表
InsertSort(ST.elem,10); // 调用插入排序函数,对静态表中的数据进行排序
STPrint(ST); // 再次打印静态表,这次是排序后的结果
scanf("%d"); // 防止程序立即退出
return 0;
}