算法导论初步-1

算法导论

在实验室待着,项目项目干不下去,觉得还是要脑子里有理论啊。

第一部分基础总结

第一部分简单介绍算法的表达方法 、一些算法设计策略 、以及算法分析中用到的许多基本思想。

  • 第一章:对算法及其在现代计算机系统中的地位进行综述。
  • 第二章:插入排序和归并排序,并粗略的分析了一下算法的运行时间。
  • 第三章:给出了算法运行时间的准确定义以及很多的数学表示法。
  • 第四章:深入的探究了分治法以及“主方法”这一个工具。
  • 第五章:介绍了概率分析和随机化算法。

第一章

什么是算法?

算法(algorithm)就是任何良定义的计算过程,该过程取某个集合作为输入并产生某个集合作为输出。
个人理解:算法就是一些正确且精妙而且可被实现的逻辑思维过程。

第二章

插入排序

插入排序的运行逻辑是啥?
插入排序的代码实现?
插入排序运行时间复杂度?

归并排序

归并排序的运行逻辑?
归并排序的代码实现?
归并排序的时间复杂度?

//插入排序
void insertion_sort(int *arr,int num)
{
 int i, t, j=1;
 for(j;j<num;j++)
 {
  for(i=j;i>0;i--)
  {
   if(arr[i]>arr[i-1])
   {
    t = arr[i];
    arr[i]=arr[i-1];
    arr[i-1]=t;
   }
  }
 }
}
//归并排序
void merge_sort(int *arr, int num)
{
 int l , r;
 l = 0;
 r = num-1;
 merge(l, r, arr);
}
void merge(int l, int r, int *arr)
{
 int i = l, j = (r+l)/2 + 1,m = (r+l)/2,t=0;
 printf("\ni%d\tr%d\tm%d\t\n", i,r,m);
 if(l==r)
 {
  printf("\nover\n");
  return;
 }
 int *temp = (int *)malloc(sizeof(int)*(r-l+1));
 merge(l, m, arr);
 merge(j, r, arr);
 while(i<=m&&j<=r)
 {
 
  if(arr[i]>=arr[j])
  {
   temp[t]=arr[i];
   t++;
   i++;
  }else{
   temp[t] = arr[j];
   t++;
   j++;
  }
 }
 if(i>m)
 {
  while(j<=r)
  {
   temp[t] = arr[j];
   j++;
   t++;
  }
 }else{
  while(i<=m)
  {
   temp[t] = arr[i];
   i++;
   t++;
  }
 }
 printf("\ntemp\n");//此处可以看到归并的过程
 for(i=0;i<r-l+1;i++)
 {
  printf("%d\t",temp[i]);
 }
  printf("\ntempend\n"); 
 for(i=l,t=0;i<=r;i++,t++)
 {
  arr[i] = temp[t];
 }
 free(temp); 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值