//插入排序(元素用线性表存储)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define InitiaSize 10
//定义动态线性表
typedef struct{
int* data; //数据域
int len; //线性表当前长度
int MaxSize; //线性表最大容量
}SqList;
//初始化并对线性表随机赋值
bool InitiaList(SqList &L){
int len;
printf("请输入你想要的线性表的长度:");
scanf("%d",&len);
while(len < 0){
printf("您输入的长度不规范,请重新输入!\n");
scanf("%d",&len);
}
if(len <= InitiaSize){
L.data = (int*)malloc(sizeof(int)*InitiaSize);
L.len = len;
L.MaxSize = InitiaSize;
}
else{
L.data = (int*)malloc(sizeof(int)*len);
L.len = len;
L.MaxSize = len;
}
printf("线性表初始化完毕!当前长度是%d,最大容量是%d\n",L.len,L.MaxSize);
int i;
printf("接下来对线性表进行随机赋值:\n");
srand(time(NULL));
for(i = 0; i < L.len; i++){
L.data[i] = rand()%100;
}
printf("随机赋值操作执行完毕!\n");
return true;
}
//读取线性表的内容
void PrintList(SqList &L){
if((L.len == 0)||(L.MaxSize == 0)){
printf("此线性表为空,无法进行读取操作!\n");
return;
}
int i;
for(i = 0; i < L.len; i++){
if(i == L.len - 1){
printf("%d\n",L.data[i]);
}
else{
printf("%d ",L.data[i]);
}
}
printf("线性表内容读取完毕!该线性表长度是%d,最大容量是%d。\n",L.len,L.MaxSize);
}
//插入排序01
void InsertSort(SqList &L){
if((L.len == 0)||(L.MaxSize == 0)){
printf("此线性表为空,无法进行插入排序!\n");
return ;
}
printf("接下来进行插入排序!\n");
int i, j, key;
for(i = 1; i < L.len; i++){
if(L.data[i - 1] > L.data[i]){
key = L.data[i];
j = i - 1;
while((j >= 0)&&(L.data[j] > key)){
L.data[j + 1] = L.data[j];
j--;
}
L.data[j + 1] = key;
}
}
printf("插入排序执行完毕!\n");
}
int main(){
SqList L; //定义一个线性表
InitiaList(L); //对线性表进行初始化并随机赋值
PrintList(L); //输出线性表内容
clock_t T; //对插入排序所花费的时间进行记录
T = clock();
InsertSort(L); //进行插入排序
T = clock();
printf("此次排序花费了%lf s\n",((float)T)/CLOCKS_PER_SEC);
PrintList(L); //输出线性表内容
return 0;
}
插入排序(C语言版)
最新推荐文章于 2024-08-09 05:37:28 发布