12 2018 档案
搜索算法—二叉搜索树
摘要:1.什么是二叉搜索树(BinarySearchTrees) 如下图所示:15为树的根节点,10为15的左节点,20为15的右节点,下面的节点如此类推。 每个父节点都有两个子节点(子节点可能为空),左子节点比父节点小,右子节点比父节点大。 2.二叉搜索树的各种功能 一、节点 每个节点应该含有两个子节点
阅读全文
排序算法—堆排序
摘要:1.排序问题 现有一个含有N个数字的数组S,如何通过程序把这个数组变成有序的数组? 例如: 排序前:S:5,3,7,5,9,4,1,100,50 排序后:S:1,3,4,5,5,7,9,50,100 2.二叉堆(binary heaps) 进行堆排序前,需要先把数组排成二叉堆,故这里先介绍二叉堆。
阅读全文
快速排序改进——3区快速排序(3-way quicksort)
摘要:1.快速排序缺陷 快速排序面对重复的元素时的处理方法是,把它放在了左部分数组或右部分数组,下次进行分区时,还需检测它。如果需要排序的数组含有大量重复元素,则这个问题会造成性能浪费。 解决方法:新增一个相同区域,并把重复元素放进去,下次进行分区时,不对相同区域进行分区。 2. 3区快速排序(3-way
阅读全文
排序算法—快速排序
摘要:1.排序问题 现有一个含有N个数字的数组S,如何通过程序把这个数组变成有序的数组? 例如: 排序前:S:5,3,7,5,9,4,1,100,50 排序后:S:1,3,4,5,5,7,9,50,100 2.快速排序(Quicksort) 简单介绍: 快速排序内含一道重要的工序:分区(Partition
阅读全文
排序算法—归并排序
摘要:1.排序问题 现有一个含有N个数字的数组S,如何通过程序把这个数组变成有序的数组? 例如: 排序前:S:5,3,7,5,9,4,1,100,50 排序后:S:1,3,4,5,5,7,9,50,100 2.归并排序(merge sort) 不同于希尔排序,这里将介绍归并排序。 百度百科的定义:归并排序
阅读全文
排序算法—希尔排序
摘要:1.排序问题 现有一个含有N个数字的数组S,如何通过程序把这个数组变成有序的数组? 例如: 排序前:S:5,3,7,5,9,4,1,100,50 排序后:S:1,3,4,5,5,7,9,50,100 2.解决方法A 从第一项逐步读到最后一项。每读一项,便把它与之前读过的数字全部进行比较,并把它放在大
阅读全文
栈与队列(Stack and Queue)
摘要:1.定义 栈:后进先出(LIFO-last in first out):最后插入的元素最先出来。 队列:先进先出(FIFO-first in first out):最先插入的元素最先出来。 2.用数组实现栈和队列 实现栈: 由于数组大小未知,如果每次插入元素都扩展一次数据(每次扩展都意味着构建一个新
阅读全文
|
|
|