2023.12.24总结

排序

  • 归并排序
  • 选择排序

归并排序

对俩个有序数组进行合并        

将a,b数组中下标相同的数进行比较,较小的数放入c数组中并且下标值+1;全部比较完后,哪个数组有多的数就全放c数组后边去

void merge(int *a,int m,int *b,int n)   //传入a,b数组和他们的长度
{
     int i,j,k;
     i=0;
     j=0;
     k=0;
     while(i<m&&j<n)   //当有一个数组中的数全部排完时停止
     {
       //将a[i]和b[j]进行比较
        if(a[i]<=b[j])
          {
             //将a[i]收入c[k];
             c[k]=a[i];
               k++;
               i++;
          
          }
         else
         {
             //将b[j]收入c[k];
             c[k]=b[j];
               k++;
               j++;
          
          }
     //a数组元素没取完
       if(i<m){
              while(i<m)
                  {
                    c[k]=a[i];
                     k++;
                    i++;
           
                  }

              }
     //b数组元素没取完
         else{
              while(j<n)
                  {
                    c[k]=b[j];
                     k++;
                     j++;
           
                  }
            }
            

     }

}

选择排序

在数中找出最小的数并将它排在最前面,然后再从剩下的数中找出最小的数并排第二位,依次类推。

    int min=0;int t=0;
for(int i=0;i<length-1-1;i++){
      min=i;
    for(int j=i+1;j<length;j++)
      {
        if(a[min]>a[j])
          {
            t=a[min];a[min]=a[j];a[j]=t;

          }


 
       }
      if(min!=i)
      {
       t=a[i];a[i]=a[min];a[min]=t;
    
      }




}

kmp算法(一点理解)

为了简便字符串的匹配,从而产生了kmp算法

最简单的方法是让子串的第一个数对齐主串中第一个数,若子串中的数与主串中的数不是一一匹配,则子串的第一个数对齐下一数,(思路简单但耗时)

eg:主串:abcdefg

       子串:abcdex

能够发现当子串中第一个数与主串中第一个数匹配时,前几个数都匹配,但g与x不匹配,kmp算法就是子串中a字符与后边的字符不相等,而这后边的字符又与主串中那些字符匹配,所以子串中的a字符不与主串中后边那些不与a相等但匹配成功的数相等,因此,子串中a字符下次直接就与主串中的g字符进行匹配,这样就能减少时间

eg:

       主串:abcababca

       子串:abcabx

    因为子串中前面的ab与后面的ab相等,所以在匹配时,前面的ab匹配成功,后面的ab也匹配成功,因此,若子串与主串匹配失败,则子串下次开始匹配的位置就是子串后边ab匹配的位置;

顺序结构和链式结构的区别:

顺序结构是在一块空间中找一个位置开始按顺序排放元素,物理上和逻辑上都是有顺序的:

链式结构就是在一块空间里随意放置元素,但你能根据这个元素找出下一个元素的位置(指针),在物理上是无序的,但在逻辑上是有序的,适用于元素的插入和删除,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值