数据结构、算法
honey199396
记录自己工作中遇到的点点滴滴沟壑。
展开
-
排序算法(三) - 冒泡排序
冒泡排序是一种效率很低但很常用的排序方法,当数据量很小的时候可以使用它。 它的实现原理是反复的交换相邻的两个未按次序排列的元素。 C++示例: #include <iostream> using namespace std; /* 冒泡排序 */ void bubbleSort(int arr[], int count) { for (int i = 0; i &l...原创 2018-03-29 17:55:01 · 216 阅读 · 0 评论 -
排序算法(二) - 归并排序
归并排序的三个步骤: 一、分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。 二、解决这些子问题,递归地求解各个子问题。然而,当子问题规模足够小,则直接求解。 三、合并这些子问题的解成原问题的解。 实现方法分解: 一、分解待排序的n个元素的序列成各具有n/2个元素的子序列。 二、使用归并排序递归的排序两个子序列。 三、合并两个已经排序的子序列以产生已排序的答案。 C++实...原创 2018-03-29 17:10:38 · 245 阅读 · 0 评论 -
排序算法(四) - 堆排序
最大堆:任何一个父节点都比子节点大 最小堆:任何一个父节点都比子节点小 堆排序的步骤分为三步: 一、建立一个堆。 二、将建立的堆整理成最大堆或者最小堆。 三、依次遍历要排序的队列节点,保证每个节点都满足最大堆或者最小堆。 C++示例: #include <iostream> using namespace std; /* 将一个堆转化为最大堆 */ void ma...原创 2018-03-29 19:40:44 · 283 阅读 · 0 评论 -
排序算法(五) - 快速排序
与归并排序一样,开始排序也是使用了分治思想,他也分为三个步骤。 一、分解,将序列分为两个子序列,方法,随便指定一个数,将队列中所有大于这个数的作为一个子序列,小于这个数的作为另外一个子序列。 二、解决,通过递归对上面两个子序列排序。 三、合并,由于子序列都是原地址排序,所以已经是排序好的序列。 快速排序是一个效率很高的排序方法,中心思想是第一步的分解,掌握了分解方法,就掌握了这个排序。 ...原创 2018-03-29 20:35:17 · 171 阅读 · 0 评论 -
排序算法(六) - 计数排序
计数排序有一个假设条件,假设:n个输入元素中的每一个都是在0到k之间的一个整数,其中k为某个整数,当k为O(n)的时候,排序的运行时间复杂度是(n)。 C++示例: #include <iostream> using namespace std; /* 计数排序 */ void countSort(int arrA[], int arrB[], int k, int c...原创 2018-03-30 00:40:40 · 307 阅读 · 0 评论 -
排序算法(七) - 基数排序
基数排序原理:将根据整数的最右边数字将其扔进相应的0~9号的篮子里,对于相同的数字要保持其原来的相对顺序(确保排序算法的稳定性),然后将篮子里的数串起来,然后再进行第二趟的收集(按照第二位的数字进行收集),就这样不断的反复,当没有更多的位时,串起来的数字就是排好序的数字。 排序时按照最低有效位进行排序来解决排序问题。 C++示例: #include <iostream> usin...原创 2018-03-30 17:17:40 · 192 阅读 · 0 评论 -
排序算法(八) - 桶排序
桶排序是目前我看到的排序算法中最复杂的一种排序方法了,不是他的排序原理复杂,是实现起来代码量比较复杂。 原理:桶排序的基本思想是将一个数据表分割成许多buckets,然后每个bucket各自排序,或用不同的排序算法,或者递归的使用bucket sort算法。也是典型的divide-and-conquer分而治之的策略。它是一个分布式的排序,介于MSD基数排序和LSD基数排序之间。 步骤: 一...原创 2018-03-30 19:15:38 · 304 阅读 · 0 评论 -
排序算法(一) - 插入排序
题目:输入一个数组,将其按从小到达的排序,该节使用插入排序。 一般当数据量不是特别大的时候采用插入排序是一种不错的选择。 C++示例: #include <iostream> void insertSort(int arr[], int count); int main(int argc, const char * argv[]) { // insert cod...原创 2018-03-29 00:06:25 · 230 阅读 · 0 评论