常用算法

       对很多计算机初学者来说,数据结构和算法是很头疼的一门课。为了让大家能更快的学会这些简单的算法,所以我用了半个晚上整理了一些常用的算法。

       我曾经也经历过巨大的痛苦,但是随着我不断地学习思考,我发现,学习数据结构和算法是有一些方法的。

       我的方法就是 8 个字:总结规律、化繁为简。

总结规律其实就是多看看这些方面的程序,然后总结出那些总是不变的地方,而这些不变的地方就是它的原理。

化繁为简其实就是去掉一段程序的输入和输出部分,以及那些不必要的东西,最后剩下算法中的数学公式或者是推导原理。

把握住这两个要点,不断地学习练习,再加记忆。我相信很快就可以掌握数据结构和算法。

由于现在已经24点了,关于上面两个要点的详细做法,等我有时间再更新。

//顺序查找算法
void ShunXuSelect(int a[], int x)
{
	
	while(j<n && x!=a[j])
		j++;
	if(j<n)
		printf("%d的位置为%d",a[j],j);
	else
		printf("未找到");
} 


//二分查找算法
void ErFenSelect(int a[], int x)
{
	int low,hig,mid;
	while(low < hig)
	{
		mid = (low+hig)/2;
		if(x<a[mid])
			hig = mid-1;
		else
			low = mid+1;
		
		if(x==a[low])
			printf("%d的位置为%d",a[low],low);
		else
			printf("未找到");
	}
} 


//冒泡排序算法
void BubbleSort(int a[], int n)
{
	for(i=1;i<n-1;i++)
	{
		for(j=1;j<n-i;j++)
		{
			if(a[j]>a[j+1])
			{
				temp = a[j+1];
				a[j+1] = a[j];
				a[j] = temp;	
			}
		}
	}	
	for(i=0;i<n;i++)
		printf("%d",a[i]);
} 



//整数n的b进制展开式 
void JinZhi(int n, int b)
{
	int a[20]; 
	int q,n,b;    //n  为输入的整数 
	int k=0;
	q=n;
	while(q!=0)     //不断地除以b,以便得到余数 
	{
		a[k]=q%b;        //数组a用于保存每次的余数 
		q=q/b;          //取商 
		k++;
	}
	for(i=k-1;i>=0;i++)       //逆序输出,得到b进制的展开式 
	{
		printf("%d",a[i]);
	}
}




//二进制数加法算法
void ErJinZhiJiaFa(int a[], int b[])  //两个数组保存的是二进制各位数字 
{ 
	int n;

	int j; 
	for(j=0;j<n-1;j++)
	{
		d = (a[j]+b[j]+c)/2;     //进位c的值  
		s[j] = a[j]+b[j]+c-2d;     //加的和 
		c = d;     //更新进位c 
	}	
	s[n-1] = c;   //保存的是最高位的进位值 
} 



//找硬币贪婪算法
void TanLan(int worthy[], int money, int n)  //硬币面值、总共钱数、硬币种类 
{
	int a[n];   //每种面值硬币的个数 
	for(i=0;i<money;i++)
	{
		a[i]=0;     //开始时,每种面值的硬币个数均为0 
		while(money>=worthy[i])
		{
			a[i]=a[i]+1;	
			money = money-worthy[i];
		}
		printf("%d面值的硬币%d个",worthy[i],a[i]);
	}
}

 

基本上都可以实现,有小部分的算法我没完全写完整,但是思想和步骤都是完整的,大家自己认真思考一下。

后期我还会加上其它算法。

并且会继续深入介绍算法编程的一些方法和步骤。

欢迎大家关注我的博客。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值