插入排序与归并排序及优化

本文主要介绍了C语言实现的插入排序和归并排序,通过比较两种排序算法的最坏情况运行时间,指出归并排序在性能上的优势。插入排序的迭代和递归实现均有展示,而归并排序则展示了其分治思想的应用。文章最后提及了不同复杂度函数的临界点问题。
摘要由CSDN通过智能技术生成

看CLRS顺便做下笔记总结一下,理清思路。(所有排序例子皆为从小到大,各位觉得哪里能更好地改进都可以指出来)

插入排序(c语言实现)

最坏情况下的运行时间是Θ(n*n),跟冒泡排序,选择排序的最坏情况下的运行时间是相同的

但是,运算的速度 插入>选择(相比冒泡交换的次数较少)>冒泡

最简单的例子啦,打牌的时候一张一张的拿到手里插入排序。

上代码

#include<stdio.h>
#include<stdlib.h>
int main(void){
    int j,i,num,key;
    scanf("%d",&num);
    int *ptr;
    ptr=(int *)malloc(num*sizeof(int));//动态内存分配
    for(i=0;i<num;i++){
        scanf("%d",&ptr[i]);
    }
    for(i=1;i<num;i++){
        key=ptr[i];//你拿到的“牌”
        j=i-1;//通过迭代找到合适的位置,将其他牌向前推
        while(j>=0&&ptr[j]>key){
            ptr[j+1]=ptr[j];
            j-=1;
        }
        ptr[j+1]=key;//最后把牌放进去
    }
    for(i=0;i<num;i++){
        printf("%d ",ptr[i]);
    }
    free(ptr);
    return 0;
}

以上的方法是从迭代实现插入排序

那么我们试下递归实现插入排序

#include<stdio.h>
#include<stdlib.h>
void insert_sort(int *ptr,int num);
int main(void){
    int i,num,*ptr;
    scanf("%d",&num);
    ptr=(int *)malloc(num*sizeof(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值