数据结构与算法
TeaMakCoder
本硕自动化,爱好撸代码
展开
-
桶排序思想及其简单实现(C++)
一、桶排序的原理是什么?桶排序,就是利用桶进行排序。什么是桶呢?这里不要把它想复杂了,桶并不是一个新的高大上的数据结构,它只是一个装元素的容器。比如现在有一个待排序的数组A:Array[] = { 10,7,8,12,19,3,1,5}不难发现,其中的元素值均处在0~20之间,那我们不妨设计四个桶,其中所装元素值分别为[0,5),[5,10),[10,15),[15,20)之间。显然,通过一次遍历很容易将A中所有元素都放入其对应的桶中,且因为每个桶的区间都无交集,每个元素归属唯一的桶:第原创 2020-09-19 10:40:40 · 797 阅读 · 0 评论 -
计数排序算法原理和实现(C++)
一、什么是计数排序计数排序的核心思想是——对于数组 array 中的某一个元素 X,倘若我们能统计出数组中小于 X 的元素个数 N。利用这一信息,可以直接把元素 X 放在数组中第 N+1个位置处。举个例子,假如有一数组:int array[] = {2,5,3,4,1};倘若 X = 3,我们可以通过一趟遍历统计出小于 3 的元素一共有 2 个(2和1),立即得数 3 应该放在整个数组的第三位(array[2] = 3),但是这样一来会覆盖原有位置的元素。为了简单起见,初始化一个和 array 同原创 2020-09-14 19:17:23 · 370 阅读 · 0 评论 -
快速排序算法原理、C++代码
最近在啃算法导论,看完了关于快排的章节,用代码实现了一遍,决定写个blog记录一下,日后忘记了好拿来复习。一、快速排序的思想快速排序使用了分治思想——假设现在手头有一个待排序的数组A:int a[] = { 1,2,5,6,7,4,2,10,9,2,30,1,4,11 }; //任意数组快速排序首先从A中任取一个基准值A0,遍历整个数组,将整个数组元素以A0为基准分为左右两个区域,左边的都小于A0,右边的都大于A0。举个例子,倘若取最后一个元素11作为基准值A0,以11为界限划分数组会得到如下原创 2020-09-13 11:04:11 · 616 阅读 · 0 评论 -
最大堆、最小堆的构造,利用堆实现数组排序的C++代码
一、什么是堆?堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。简单点说堆就是满足特定条件的完全二叉树,这里的“特定条件”分两种:即要么这棵树所有的节点都不大于(小于等于)其根节点(如果有)的值,如下图所示就称为最大堆。要么这棵树所有的节点都不小于(大于等于)其根节点的值,如下图所示的称为最小堆。一句话,对于一颗完全二叉树,根节点总最大时叫最大堆,根节点总最小时叫最大堆。二、如何构造一个堆以构建最原创 2020-09-10 20:46:52 · 601 阅读 · 1 评论