
算法
文章平均质量分 78
To-String
Programming changes the world
展开
-
二分查找在C++中的实现
在计算机科学中,折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。优点是比较次数少,查找速度快原创 2017-05-01 11:24:35 · 334 阅读 · 0 评论 -
【初探】“ 选择排序 ” ——C++代码实现
选择排序(Selection sort)是一种简单直观的排序算法。无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 简单排序处理流程首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排...原创 2018-11-23 15:53:31 · 356 阅读 · 0 评论 -
【初探】“直接插入排序”—— C++代码实现
目录直接插入排序简介算法步骤算法演示复杂度分析稳定性直接插入排序算法的特点直接插入排序简介● 插入排序是一种简单直观的排序算法,它也是基于比较的排序算法。它的工作原理是通过不断扩张有序序列的范围,对于未排序的数据,在已排序中从后向前扫描,找到相应的位置并插入。插入排序在实现上通常采用就地排序(不占用额外内存或占用常数的内存,当需要大量数据排序时,占用内存非常少。),...原创 2018-11-24 15:50:48 · 708 阅读 · 0 评论 -
【初探】 “ 冒泡排序 ” —— C++代码实现
目录普通的冒泡排序使用标志的冒泡排序普通的冒泡排序冒泡排序是一种交换排序。什么是交换排序呢?交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。● 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再...原创 2018-11-02 22:21:51 · 263 阅读 · 0 评论 -
【初探】 二叉搜索树
二叉查找树简介● 二分查找树BST(也叫二叉查找树、二叉排序树)的提出是为了提供查找效率,之所以称为二分查找树,因为该二叉树对应着二分查找算法,查找平均的时间复杂度为o(logn),所以该数据结构的提出是为了提高查找效率。● 二叉查找树(Binary Search Tree) ,是指一棵空树或者具有下列性质的二叉树:(1)若根节点有左子树,则左子树的所有节点都比根节点小(就是左子树原创 2017-10-04 15:23:04 · 251 阅读 · 0 评论 -
【初探】 堆排序
堆排序介绍● 堆排序(Heap Sort): 是指利用堆这种数据结构所设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn) (堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法),它也是不稳定排序。注意: 在学习堆排序之前,有必要了解堆!若读者不熟悉堆,建议先了解堆(建议可以通过二叉堆,左倾堆,斜堆,二项堆或斐波那契堆等原创 2017-09-10 15:54:43 · 484 阅读 · 0 评论 -
【初探】 归并排序
归并排序介绍● 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。● 归并排序(MERGE-SORT): 是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修原创 2017-09-02 15:53:54 · 264 阅读 · 0 评论 -
【初探】 基数排序
基数排序介绍● 基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。基数排序与其他排序算法不同,它不需要比较关键字的大小。它是根据关键字中各位的值,通过对排原创 2017-09-17 15:44:11 · 412 阅读 · 0 评论 -
【初探】快速排序
快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。 快速排序的基本思想是,通过一轮的排序将序列分割成独立的两部分,其中一部分序列的关键字(这里主要用值来表示)均比另一部分关键字小。继续对长度较短的序列进行同样的分割,最后到达整体有序。在排序过程中,由于已经分开的两部分的元素不需要进行比较,故减少了比较次数,降低了排序时间。思想:原创 2017-05-29 17:35:27 · 337 阅读 · 0 评论 -
【初探】 二分(折半)插入排序
基本概念● 插入排序(binary insertion sort):是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。其与直接排序算法最大的区别在于查找插入位置时使用的是二分查找的方式,在速度上有一定提升。算法描述和分析● 一般来说,二分插入原创 2017-08-23 15:39:36 · 679 阅读 · 0 评论 -
【初探】 希尔排序
希尔排序介绍● 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。 希尔排序是非稳定排序算法。希尔排序的设计体现了计算机领域的“分治法”思想。在众多排序算法中,目前而言,希尔排序是唯一能在效率上与快速排序一较高低的算法,目前只有原创 2017-08-25 15:25:15 · 839 阅读 · 0 评论 -
【初探】“ 希尔排序 ”—— C++代码实现
目录希尔排序算法介绍希尔排序的基本思想希尔排序的算法性能时间复杂度 直接插入排序和希尔排序的比较希尔排序算法介绍● 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n^2)的第一批算法之一。 希尔排序是非稳定排序算法...原创 2018-11-26 15:56:22 · 368 阅读 · 0 评论