插入排序算法(C语言)

前言:

这篇博客主要讲插入排序算法的相关内容,当然啦,相比于教科书所举出的冒泡排序,选择排序等排序方式,这个相对要难一些,不过,万变不离其中,只要你热爱算法,那就来看一下我的这篇博客吧!

题目:

 给定一乱序数组,和需插入的值,请你利用编程输出一个新的数组,其元素只包括乱序数组元素和要插入的元素,且是按升序排列。
输入样例:
4
1 3 4 5
2
1 2 3 4 5

分析:

  1. 首先我们先把给定的乱序数组进行升序排列。
  2. 再则找出数组中第一个大于要插入的数的索引,再此将后面的元素右移一位,并保存在新数组中。

代码:

#include<stdio.h>
const int N=1000;                         //定义一个数组所能包含的元素个数 
int n,a[N];
int main(){
	while(scanf("%d",&n)==1){
		int stack[N],top=0,i;            //实现一个栈,其top表示栈顶 
		for(i=0;i<n;i++){
			scanf("%d",&a[i]);
		}
		int j=1,A=1; 
		i=0;                                //j的结果会影响最后的输出结果 
		while(i<n){
			if(A==a[i]){
				A++;
				i++;
			}
			else if(top&&stack[top]==a[i]){
				top--;                        //top--表示栈指针-1,指向栈顶 
				i++;
			}
			else if(A<=n){
				stack[++top]=A++;             //++top表示栈指针加一,指向进栈 
			} 
			else{
				j=0;
				break;
			}
		}
		printf("%s\n",j?"Yes":"No");           //当j=1时输出Yes,j=0时,输出No 
	}
	return 0;
}                           

 我认为我的注释已经够清楚了,在此我就不再详细讲解了。

算法分析:

 从上述代码我们可以来看看,当我们输入的乱序数组是一个刚刚排序好的数组的话,那么上述代码,在解决该题的效率就会很高,或者说是在该代码中效率最高的一种情况,反之,当我们输入的数组是一个逆序方式的排序的话,那么上述代码在解决该题的话,就会效率极低(最低的一种情况)。上面我们所谈论的是有关于该算法的时间复杂度的分析,如果你有所了解,那么你就会大致知道最好的一种情况,其总时间是一个一次函数的表达式,其变量为执行一次所需要的时间,当然啦,最坏的一种情况为一个一元二次函数的表达式。我认为,在求取最高效率算法的过程中,应该是一种不一样的乐趣吧!

结束语:

好了,大家,这篇博客到此也结束了,同时希望对大家有所帮助。希望大家多多支持!!!😃😃😃

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值