美文网首页
算法初级

算法初级

作者: 饥人谷_罗超 | 来源:发表于2018-12-08 21:47 被阅读14次

什么是算法?

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

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

什么是数据结构

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

  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

冒泡排序

选择排序

伪代码

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

选择排序

计数排序

伪代码

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

计数排序

相关文章

  • 算法——初级排序算法

    最近,在通过《算法4》这本书来重新学习一下算法,从最初级的排序算法。初级的排序算法有3种:选择排序、插入排序、希尔...

  • 算法初级

    伪代码与流程图 机构化编程 一行一行的执行代码 有条件控制语句 if...else... 有循环控制语句while...

  • 算法初级

    结构化编程 一行一行的执行 有条件控制语句if...else 有循环控制语句while(exp)do 伪代码 语法...

  • 初级算法

    工作忙完了,就闲着浏览各种各样的网页,看到了W3Cschool的关于算法的挑战,感觉还蛮有意思的,进而总结了一下。...

  • 算法初级

    什么是算法? 以下是高德纳在他的著作《计算机程序设计艺术》里对算法的特征归纳: 输入:一个算法必须有零个或以上输入...

  • 排序(二) -- 进阶排序算法

    背景 我们上一节复习了三个初级的排序算法(选择,插入,冒泡),这一节我们继续学习时间复杂度优于初级算法的三个算法(...

  • 初级算法-Dijkstra算法

    问题描述 一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、...

  • 算法初级(排序算法)

    结构化编程&伪代码 说到排序算法,就要先讲一下什么是结构化编程,总结一下来说,结构化编程有以下特点:1.一行一行执...

  • 初级排序算法

    选择排序:首先找到数组中最小的那个元素,其次将它和数组第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己...

  • Python算法(初级)

    1.请计算 2.5 + 10 / 4 ,并解释计算结果为什么不是期望的 5.0 ? 2.假设新来一名学生Paul,...

网友评论

      本文标题:算法初级

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