zoukankan      html  css  js  c++  java
  • step3 . day8数据结构之算法

    关于算法,理解的不算很深刻,了解到好的算法不仅在时间的节约和空间的利用上,都最求最优的代码。

    比较经典的算法就是各种排序、查找了,下面贴两个理解比较深的优化算法(二分查找在顺序二叉树那里写过了,不再重复,哈希查找的重点在于映射方法和冲突的解决)

    1.上台阶问题,100个台阶,可以走1个2个和5个,有多少总方案,我自己优化的话,只能从暴力穷举→有限穷举→去除无效穷举这几个方向优化,不过最终的代码给了我很多的启发,找规律后再写代码会好的多,代码如下
    #include<stdio.h>

    int fun1(){
    int count = 0;
    int i,j,k;
    for(i=0;i<=100;i++)
    for(j=0;j<=100;j++)
    for(k=0;k<=100;k++){
    if(i+2*j+5*k==100)
    count++;
    }
    printf("count in fun1 = %d ",count);
    printf("fun1循环 %d 次 ",i*j*k);
    }

    int fun2(){
    int count = 0;
    int i,j,k;
    for(i=0;i<=20;i++)
    for(j=0;j<=50;j++)
    for(k=0;k<=100;k++){
    if(5*i+2*j+k==100)
    count++;
    }
    printf("count in fun2 = %d ",count);
    printf("fun2循环 %d 次 ",i*j*k);
    }


    int fun3(){
    int count = 0;
    int i,j;
    for(i=0;i<=20;i++)
    for(j=0;j<=50;j++)
    { if(5*i+2*j<=100)
    count++;
    }
    printf("count in fun3 = %d ",count);
    printf("fun3循环 %d 次 ",i*j);
    }

    int fun4(){
    int count = 0;
    int i;
    for(i=0;i<=100;i+=5)
    count+=(100-i+2)/2;
    printf("count in fun4 = %d ",count);
    printf("fun4循环 %d 次 ",i/5);
    }

    1.快速排序法:思想是将第一个数作为标的,从前和从后分别找大于和小于的书,区分放入位置,已到达将标的放到中间,两边的总体大小已经排序OK,进而递归调用继续排序。


    #include<stdio.h>
    int bubblesort(int a[],int size){
    int i,j,k=0;
    for(i=0;i<size-1;i++){
    for(j=0;j<size-i-1;j++){
    if(a[j]>a[j+1]){
    a[j] += a[j+1];
    a[j+1] = a[j]-a[j+1];
    a[j] = a[j]-a[j+1];
    k++;
    }

    }

    }

    return k;
    }

    void show(int a[],int size){
    int i;
    for(i=0;i<size;i++){
    printf("%d ",a[i]);
    }
    printf(" ");
    }

    static count =0;
    int quicksort(int a[],int lift,int right){

    if(lift>=right)
    return -1;
    int i = lift;
    int j = right;
    int temp = a[i];
    while(i<j){
    while(i<j && temp <= a[j]){
    j--;
    count++;
    }
    a[i]=a[j];
    printf("________________ ");
    show(a,8);
    while(i<j && a[i] <= temp)
    { i++;
    count++;
    }
    a[j]=a[i];
    printf("________________ ");
    show(a,8);
    }
    a[i]=temp;
    printf("____________________________ ");
    show(a,8);
    quicksort(a,lift,i-1);
    quicksort(a,i+1,right);
    return count;

    }

  • 相关阅读:
    大二第二学期周学习进度总结(七)
    java课程之团队开发冲刺阶段1.1
    Java课程之团队开发(NABCD需求分析)
    大二第二学期周学习进度总结(六)
    Java课程之团队开发(团队介绍)
    大二第二学期周学习进度总结(五)
    模拟退火 费马点求解
    三分 传送带
    2357数
    B监狱 noip 模拟 7.29(区间DP)
  • 原文地址:https://www.cnblogs.com/huiji12321/p/11279458.html
Copyright © 2011-2022 走看看