第一章,第二章,第三章
第一章
二分查找和简单查找
简单查找就是顺序一个一个的查找。缺点是复杂度o(n)比较高,好处是无论什么的原始数据都可以利用。
二分查找,二分查找的前提必须是有序的不然就会失去意义,二分查找利用有序的特点,每次都可以去掉当前数组长度的一半,所以复杂度为o(log2(n))
代码:
#include<stdio.h>
int search(int a[],int n,int x) //数组已经有序 x为查找值,n为数组个数,返回查找值的索引 不存在就返回-1
{
int low=0;
int high=n-1;
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>x)
high=mid-1;
else
if(a[mid]<x)
{
low=mid+1;
}
else
return mid;
}
return -1;
}
int main()
{
int a[]={1,2,3,4,5,6};
int x;
while(scanf("%d",&x))
{
int temp=search(a,6,x);
if(temp!=-1)
printf("%d\n",a[temp]);
else
printf("no fund\n");
}
}
大o表示法
是一种算法分析常用的表示方法,更多的表示随着规模n的变大的增速。它指出了算法运行时间的增速。一般情况下也是这种算法最差情况下的复杂度。
第二章 选择排序
选择排序实质上就是固定了每个位置必须是(假设你想要递增的序列),最小,大一点,再大一点,最大。当你完成这样的序列也说明排列完成了。
想要实现这个你就需要去到后面挨个去判断,交换。
代码实现和测试
#include<stdio.h>
int select_sort(int a[],int n)
{
int i,j;
int min;
int temp;
if(n<=0)
return 0;
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[min])
min=j;
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
return 1;
}
int main()
{
int a[]={1,7,4,6,3,-2,2};
select_sort(a,sizeof(a)/sizeof(a[0]));
int i;
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
printf("%d ",a[i]);
return 0;
}
第三章递归:
首先他介绍了一个盒子堆的例子实质上这俩个例子,第一个例子象征的是广度搜索(bfs),第二个例子象征的深度搜索(dfs)从而引出递归.
递归并没有性能的优势,反而可能性能更差,每次调用递归都需要从新定义局部变量。很多情况下循环更具备有点,但他有独一无二的优点
就是理解方便。有时候编码很容易。
基线条件和递归条件:
递归条件是指函数调用自己,而基线条件是指函数不在调用自己,从而避免形成无线循环。

浙公网安备 33010602011771号