算法分析与设计复习1

1.快速排序

  1. 传入划分值a,通过与a比较大小 ,将数据分为大于a和小于a的两部分。返回a对应的数组下标p
  2. 以p作为界定,将数据分为两部分,再次进行快速排序
  3. 递归运行以上程序
void  Ksort(int a[ ],int  low,int high)
{
         p=part(a,low,high)
         Ksort(a,low,p-1)
         Ksort(a,p+1,high)

2.折半查找

1.将无序的数组有序的进行排列
2.取中位数比较

  1. 相等 返回下标
  2. 比中位数大 提高取中位数的下界 再次折半查找
  3. 比中位数小 降低取中位数的上界 再次折半查找
Midsort(int a[],int low,int high)
{
      mid=(high+low)/2 
      if(a[mid] == x )
            return mid
      if(a[mid] > x)
            return    Midsort(a,low,mid-1)
      if(a[mid] < x)
            return    MIdsort(a,mid+1,high)
}

3.动态规划

前面子序列之和

  1. 大于0,保留b=b+a[i]
  2. 小于等于0,则丢弃,令b=a[i]
  3. 记录每一轮的最大长度
b=0
sum=0
for(int i=0;i<n;i++)
{
    if  (b>0)
        b+=a[i];
   else
        b=a[i];
     
   if(b>sum)
      sum=b;
}

4.哈夫曼编号

 1.权值排序
 2.绘图
 3.编码
 4.演示合并过程
 5.计算权值

在这里插入图片描述

5.棋盘覆盖

  1. 识别棋盘是否正常

    1. 否 继续划分
    2. 是 进行t填充使棋盘不正常
  2. 不断递归直到全部填充满

发布了122 篇原创文章 · 获赞 221 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/jjsjsjjdj/article/details/103529562