插入排序02(C语言版)

//插入排序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;
}

//若上述代码有误,欢迎在评论区指正!万分感谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值