第一章,第二章,第三章

第一章

 

二分查找和简单查找

 

简单查找就是顺序一个一个的查找。缺点是复杂度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)从而引出递归.

递归并没有性能的优势,反而可能性能更差,每次调用递归都需要从新定义局部变量。很多情况下循环更具备有点,但他有独一无二的优点

就是理解方便。有时候编码很容易。

 

基线条件和递归条件:

递归条件是指函数调用自己,而基线条件是指函数不在调用自己,从而避免形成无线循环。

 

posted @ 2020-10-21 21:37  罪梦者  阅读(126)  评论(0)    收藏  举报