痛苦的c语言学习—算法基础

二分查找
给定一个有序数列,查找指定的数值在第几位

  1. 注意整个循环体的条件是用low<=high来判断的,以及low=mid+1,若最后low>high 都没查到 跳不出循环 就说明不存在
  2. 注意n==a[mid] n等于的是在mid位置的存的值 不是mid哦
  3. 最后算多少位的时候mid要+1 因为mid是与a[N]一样是从0开始算的
#include<stdio.h>
#define N 10

int main()
{
    int a[N]={11,12,13,14,15,16,17,18,19,20};
    int high,mid,low,n;
    high=N-1;
    low=0;
    scanf("%d",&n);
    while(low<=high)
    {
        mid=(low+high)/2;
        if(n==a[mid]) break;
        else if(n<a[mid]) high=mid-1;
        else low=mid+1;
    }
    if(low<=high) printf(" 第几位=%d",mid+1);
    else {printf("no found");}
    return 0;
}

冒泡排序

  1. 两个for叠加循环那里是精髓 相邻两个数比较 排序 最后那个数就用j<N-1放着不用管了
#include <stdio.h>
#define N 10

int main()
{
    int i,j,a[N],turn;
    for(i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=1;i<N;i++)
    {
        for(j=0;j<N-i;j++)
        {
            if(a[j]<a[j+1])
            {
                turn=a[j];
                a[j]=a[j+1];
                a[j+1]=turn;
            }
        }
    }
    for(i=0;i<N;i++)
        printf("%3d",a[i]);
    return 0;
}

插入排序算法

  1. 算法的精髓在于while部分,while部分的j-- 就是依次降级 后面自减后的j+1就相当于j(大概意思是这样的)
  2. 重点就是从第二项开始,依次取一项向前比较大小 比完就放好 循环
#include <stdio.h>
#define N 6

int main()
{
    int i,j,a[N],turn;
    for(i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=1;i<N;i++)
    {
        turn=a[i];
        j=i-1;
        while(j>=0&&turn<a[j])
        {
            a[j+1]=a[j];
            j--;
        }
        a[j+1]=turn;
    }
    for(i=0;i<N;i++)
        printf("%3d",a[i]);
    return 0;
}

牛顿迭代法

  1. 记住公式
  2. fabs()是求小数的绝对值 abs()是求整数的绝对值
  3. 记住大致流程吧
#include<stdio.h>
int main()
{
    double x1,x,f,f1;
    scanf("%lf",&x1);
    do{
        x=x1;
        f=x*(2*x*x-x*4+3)-6;
        f1=6*x*x-8*x+3;
        x1=x-f/f1;
    }while(fabs(x1-x)<=1e-5);
    printf("%lf",x1);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值