分治、回溯、归并、快速排序
分治:其实就是字面意思,分而治之,将一件比较大且难以解决的事分成一些小事来解决,比较容易且简单,其实就是一种思想。
归并中其实就用到了这种思想,将一个较大的集合给分成两个相同大小的子集,再分别进行操作,最后再合在一起,就用了这样的方法。
例如在二分法中其实也有所体现,只不过二分法的数字已经经过了排序,步骤相对较简单较容易理解。
int find(int n,int a[],int l)
{
int low=0;
int high=l-1;
int middle=0;
while(low<high)
{
middle=(low+high)>>1;
if(n==a[middle])
{
printf("%d,%d",n,middle);
return 1;
}
else if(n>a[middle])
low=middle+1;
else
high=middle-1;
}
return 0;
}
这类为二分法,很简单的思想,却也体现了归并与分治的思想。
快速排序:主要利用递归,因为其实内在也是循环。就是通过循环的对比大小来交换位置实现大小排序。所以,只要理解其内部思想以及递归便可以较快掌握。
回溯:类似于枚举的方法。在给定条件下不停的尝试,如果可以就输出,不可以就重新回到一开始的数据继续尝试。
注意得遍历所有的值,我觉得是一种挺暴力的方法。
这段时间的学习,我主要还是在理解所学内容当中,当然,这些知识想单纯的去理解还是不难的。难就难在运用,我到现在还对线性表的那些特定的词汇还是没记清。不过我想这还是一个循序渐进的过程吧,等我以后多打一些码,相信还是可以学精学好的。同时,这也警醒我,一门语言的学习终究是不简单的,是要有长期努力的学习,才可以真正掌握它。