美文网首页
数据结构与算法

数据结构与算法

作者: 加油吧_ | 来源:发表于2018-04-13 23:24 被阅读15次

    什么是算法?

    以下是高德纳在他的著作《计算机程序设计艺术》里对算法的特征归纳:

    输入:一个算法必须有零个或以上输入量。
    输出:一个算法应有一个或以上输出量,输出量是算法计算的结果。
    明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地匹配要求或期望,通常要求实际运行结果是确定的。
    有限性:依据图灵的定义,一个算法是能够被任何图灵完备系统模拟的一串运算,而图灵机只有有限个状态、有限个输入符号和有限个转移函数(指令)。而一些定义更规定算法必须在有限个步骤内完成任务。
    有效性:又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。

    什么是数据结构

    就是数据的结构。
    一般来说是这样的:

    1. 我们要解决一个跟数据相关的问题
    2. 分析这个问题,想出对应的数据结构
    3. 分析数据结构,想出算法
      数据结构和算法是互相依存、不可分开的
      你学习完排序算法,就能了解常见的数据结构

    排序算法

    体育委员两两摸头法(冒泡排序)
    体育老师一指禅法(选择排序)
    起扑克牌法(插入排序)
    强迫症收扑克牌法(基数排序)
    快排
    归并排序
    堆排序
    排序可视化:https://visualgo.net/bn/sorting

    1. 冒泡排序 2. 选择排序 3. 桶排序

    冒泡排序

    伪代码

    a <- {
        '0':4,
        '1':6,
        '2':3,
        '3':2,
        '4':1,
        'length': 5
    }
    轮数 = 1
    左手指向的下标 
    
    while(轮数 < a['length'])
        左手指向的下标 = 0
        while(左手指向的下标 <= a['length'] - 1 - 轮数)
            if a[左手指向的下标] < a[左手指向的下标+1]
                // 什么也不做
            else
                // 交换左右的位置
                t <- a[左手指向的下标]
                a[左手指向的下标] <- a[左手指向的下标+1]
                a[左手指向的下标+1] <- t
            end
            左手指向的下标 <- 左手指向的下标+1
        end
        轮数 <- 轮数 + 1
    end
    print a
    /////////
    
    轮数  左手指向的下标最大值(从0开始)
    1        3
    2       2
    3       1
    4       0
    
    冒泡排序 摸摸头法.png

    选择排序

    伪代码

    a <- {
      '0':3,
      '1':5,
      '2':1,
      '3':7,
      '4':2,
      '5':6,
      'length':6
    }
    轮数 <- 1
    while (轮数 < a['length'])
      minIndex <- 轮数-1
      index <- minIndex+1
      while (index < a['length'])
        if(a[minIndex] < a[index])
          index <- index+1
         else
            minIndex <- index
             index <- index+1
         end
         t <- a[轮数-1]
         a[轮数-1] <- a[minIndex]
         a[minIndex] <- t
        index <- index+1
      end
    print a
    end
    
    选择排序 .png

    计数排序

    伪代码

    a <- {
        '0':0,
        '1':2,
        '2':1,
        '3':56,
        '4':4,
        '5':67,
        '6':3,
        'length:7'
    }
    hash <- {}
    index <- 0
    while index < a['length']
        number <- a[index]
        if hash[number] == undefined // hash[number] 不存在
            hash[number] = 1
        else
            hash[number] <- hash[number] + 1
        end
        index <- index + 1
    end
    
    index2 <- 0
    max <- findMax(a) // 最大值67
    newArr <- {}
    while index2 < max + 1
        count <- hash[index2]
        if count != undefined // count 存在
            countIndex <- 0
            while countIndex < count
                newArr.push(index2)
                countIndex <- countIndex + 1
            end
        end
        index2 <- index2 + 1
    end
    print newArr
    
    计数排序.png

    相关文章

      网友评论

          本文标题:数据结构与算法

          本文链接:https://www.haomeiwen.com/subject/nbahkftx.html