随笔分类 -  排序算法

常见排序算法
十大经典排序之基数排序(C++实现)
摘要:#基数排序 也是采用分桶的思想,但是加入了按位比较的思想(可以理解为每位进行一次计数排序) 思路: 计算数列中最大位数 按位数循环处理每位的排序 代码实现: #include<iterator> #include<iostream> #include<vector> using namespace 阅读全文
posted @ 2021-04-18 17:10 逆流而上の鱼 阅读(307) 评论(0) 推荐(0)
十大经典排序之桶排序(C++实现)
摘要:#桶排序 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定 思路: 根据数据规模,初始化合理桶数 将数列中的数据按照桶的规模进行映射,尽量保证数据被均匀的分布到桶中 每个桶使用插入排序排好子序列 最后使用双指针思想使用插入排序合并每个桶,完成排序 代码实现: 阅读全文
posted @ 2021-04-18 16:55 逆流而上の鱼 阅读(1079) 评论(0) 推荐(0)
十大经典排序之计数排序(C++实现)
摘要:#计数排序 核心思想:计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 思路: 找出待排序的数组中最大和最小的元素 统计数组中每个值为i的元素出现的次数,存入数组C的第i项 对所有的计数累加(从C中的第 阅读全文
posted @ 2021-04-18 15:42 逆流而上の鱼 阅读(226) 评论(0) 推荐(0)
十大经典排序之堆排序(C++实现)
摘要:#堆排序 通过将无序表转化为堆,可以直接找到表中最大值或者最小值,然后将其提取出来,令剩余的记录再重建一个堆, 取出次大值或者次小值,如此反复执行就可以得到一个有序序列,此过程为堆排序。 思路: 1.创建一个堆 H[0……n-1]; 2.把堆首(最大值)和堆尾互换; 3.把堆的尺寸缩小 1,并调用 阅读全文
posted @ 2021-04-17 20:42 逆流而上の鱼 阅读(364) 评论(0) 推荐(0)
十大经典排序之快速排序(C++实现)
摘要:#快速排序 通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 思路: (1)选择基准:从数列中挑出一个元素,称为 "基准"(pivot)。挑选方法(首尾法,随机取值法,三数取中法) (2)重新排序数列 阅读全文
posted @ 2021-04-17 19:49 逆流而上の鱼 阅读(745) 评论(0) 推荐(1)
十大经典排序之归并排序(C++实现)
摘要:#归并排序 思路:(分而治之的思想) 1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列; 2.设定两个指针,最初位置分别为两个已经排序序列的起始位置; 3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置; 4.重复步骤 3 直到某一指针达到序列 阅读全文
posted @ 2021-04-14 23:12 逆流而上の鱼 阅读(459) 评论(0) 推荐(0)
十大经典排序之希尔排序(C++实现)
摘要:#希尔排序 思路: 1.选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1(最后必须是1) 2.按增量序列个数 k,对序列进行 k 趟排序 代码实现: #include <iostream> using namespace std; template <typename 阅读全文
posted @ 2021-04-14 22:02 逆流而上の鱼 阅读(297) 评论(0) 推荐(0)
十大经典排序之插入排序(C++实现)
摘要:#插入排序 思路: 1.将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列 2.从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。) 3.重复第二步,直到所有元素 阅读全文
posted @ 2021-04-14 00:10 逆流而上の鱼 阅读(453) 评论(0) 推荐(0)
十大经典排序之选择排序(C++实现)
摘要:#选择排序 思路: 1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾 3.重复第二步,直到所有元素均排序完毕 代码实现: #include <iostream> using namespace std; te 阅读全文
posted @ 2021-04-12 23:03 逆流而上の鱼 阅读(417) 评论(0) 推荐(0)
十大经典排序之冒泡排序(C++实现)
摘要:#冒泡排序 思路: 1.比较相邻的元素。如果第一个比第二个大,就交换它们两个 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数 3.针对所有的元素重复以上的步骤,除了最后一个 4.重复步骤1~3,直到排序完成 代码实现: #include <iostr 阅读全文
posted @ 2021-04-12 22:44 逆流而上の鱼 阅读(782) 评论(0) 推荐(0)
十大经典排序之前言
摘要:#十大经典排序 #内部排序 数据记录在内存中排序 插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等 稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同 #外部排序 而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器 阅读全文
posted @ 2021-04-12 22:43 逆流而上の鱼 阅读(74) 评论(0) 推荐(0)