希尔排序算法
希尔排序(Shell Sort)是插入排序的一种。因D.L.Shell于1959年提出而得名。
希尔排序基本思想
基本思想:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2《d1重复上述的分组和排序,直至所取的增量dt=1(dt《dt-l《…《d2《d1),即所有记录放在同一组中进行直接插入排序为止。
详细资料:http://bk.baidu.com/view/178698.htm
c语言递归算法
用递归法计算n!
用递归法计算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! (n》1)
按公式可编程如下:
long ff(int n)
{
long f;
if(n《0) printf(“n《0,input error“);
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf(“\ninput a inteager number:\n“);
scanf(“%d“,&n);
y=ff(n);
printf(“%d!=%ld“,n,y);
}
程序中给出的函数ff是一个递归函数。主函数调用ff 后即进入函数ff执行,如果n《0,n==0或n=1时都将结束函数的执行,否则就递归调用ff函数自身。由于每次递归调用的实参为n-1,即把n-1的值赋予形参n,最后当n-1的值为1时再作递归调用,形参n的值也为1,将使递归终止。然后可逐层退回。
下面我们再举例说明该过程。设执行本程序时输入为5,即求5!。在主函数中的调用语句即为y=ff(5),进入ff函数后,由于n=5,不等于0或1,故应执行f=ff(n-1)*n,即f=ff(5-1)*5。该语句对ff作递归调用即ff(4)。
进行四次递归调用后,ff函数形参取得的值变为1,故不再继续递归调用而开始逐层返回主调函数。ff(1)的函数返回值为1,ff(2)的返回值为1*2=2,ff(3)的返回值为2*3=6,ff(4)的返回值为6*4=24,最后返回值ff(5)为24*5=120。
没学过C语言可以学C语言数据结构与算法吗
没有学过C语言或者C++的话,学数据结构(C语言版、C++版) 是非常困难的。因为数据结构是建立在对应的语言上的,所以说首先要学语言。建议学C语言,它是计算机语言的基础,C++、java 都是从C上发展过来的。学过C后 在学 C++/java的话,你会发现事半功倍,而且对你 介入程序员行当很又帮助,而且 C 与VB 很多地方是相通的不同是指针那块,学起来也容易的多。
没有学过 C语言或者C++ 的话 学起数据结构(C语言版、C++版) 都是不可能的 因为 数据结构是建立在 对应的语言上的,所以说首先要学语言 如果你想 有很坚实的计算机基础的话 那你就 学C 语言 虽然C语言实用性好 很与时具进 但是不容易学 所以建议你学C语言 ,它是计算机语言的基础,C++、java 都是从C上发展过来的学过C后 在学 C++/java的话 你会发现事半功倍,而且对你 介入程序员行当很又帮助 而且 C 与VB 很多地方 是相通的 不同是指针那块 学起来也容易的多
首先有个东西你需要了解到,程序 = 算法 + 数据结构,无论我们是学Java、Python、PHP还是C语言,对数据结构都要有一定的了解,如今很多学编程的人,只注重语法上的使用,当然或多或少都有对数据结构有学习过的,而那些根本没学过数据结构的人呢?就只能强行去理解使用。其实数据结构是一门具有艺术性的学科。
如何更好地理解数据结构?
一图一代码
一功能一函数
一图一代码
任何的数据结构的操作,其实都是建立在实际的物理模型之上,我们在学习数据结构的时候,首先你要了解长相,其次在做相应结构实际操作是要根据自己的逻辑图去分析,所有的代码源自于自己的物理模型,数据结构中的结构体定义其实就是描述事物的特征.
一下简单的举例一下
栈结构
大顶堆
二叉树
一功能一函数
我们在写数据结构的时候, 一定要一函数以功能,划分明确,出错易找,写起来也容易上手,而一功能也能一图。以链式结构为例。
所有的代码都是源自于物理分析,也就是所谓的画图说话
-希尔排序的详细过程