//插入排序02
#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 + 1));
L.len = len;
L.MaxSize = len + 1;
}
printf("初始化完毕!\n");
if((L.len == 0)||(L.MaxSize == 0)){
printf("此线性表为空,无法进行随机赋值!\n");
return false;
}
int i;
srand(time(NULL));
for(i = 1; i <= L.len; i++){
L.data[i] = rand()%100;
}
printf("随机赋值完毕!\n");
return true;
}
bool PrintList(SqList &L){
if((L.len == 0)||(L.MaxSize == 0)){
printf("此线性表为空,无法进行输出操作!\n");
return false;
}
int i;
for(i = 1; i <= L.len; i++){
if(i == L.len){
printf("%d\n",L.data[i]);
}
else{
printf("%d ",L.data[i]);
}
}
printf("此线性表输出完毕!长度是%d,最大容量是%d!\n",L.len,L.MaxSize);
return true;
}
bool Inert_Sort(SqList &L){
if((L.len == 0)||(L.MaxSize == 0)){
printf("此线性表为空,无法进行插入排序!\n");
return false;
}
printf("即将进行插入排序!\n");
int i, j;
for(i = 2; i <= L.len; i++){
if(L.data[i - 1] > L.data[i]){
L.data[0] = L.data[i]; //将线性表中的首个元素作为交换的中介
j = i - 1;
while(L.data[j] > L.data[0]){
L.data[j + 1] = L.data[j];
j--;
}
L.data[j + 1] = L.data[0];
}
}
printf("插入排序执行完毕!\n");
return true;
}
int main(){
SqList L;
InitiaList(L);
PrintList(L);
clock_t T;
T = clock(); //记录插入排序花费的时间
Inert_Sort(L); //进行插入排序
T = clock();
PrintList(L);
printf("此次排序共耗时%lf s\n",((float)T)/CLOCKS_PER_SEC);
return 0;
}
//若上述代码有误,欢迎在评论区指正!万分感谢!!!