
排序算法
文章平均质量分 51
基于C++的10种排序算法实现
LiuZuqiang_3027
҉ 加载中..
展开
-
基数排序C++实现
10.基数排序基数排序的基本思想基数排序的算法步骤C++代码实现基数排序的基本思想基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发展:(计数→桶→基数排序)计数排序:每个桶只存储单一键值;桶排序:每个桶存储一定范围的数值;基数排序:根据键值的每位数字来分配桶。静态图解:按照个位数进行排序;按照十位数进行排序;按照百位数进行排序原创 2021-04-13 14:21:15 · 2328 阅读 · 1 评论 -
桶排序C++实现
9.桶排序桶排序的基本思想桶排序的算法步骤C++代码实现桶排序的基本思想桶排序是计数排序的扩展,计数排序可以看成每个桶只存储一个元素,而桶排序每个桶存储一定范围的元素。桶排序原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,然后对每个桶分别进行内部排序,最后把全部的数据合并放回原数组中。时间、空间复杂度:桶排序的时间复杂度,取决于对各个桶内数据进行排序的时间复杂度(桶内排序),因为其他部分的时间复杂度都是o(n)(桶际排序)。桶划分地越小,各个桶内的数据越少,排序时间也会越少,但相应的空间原创 2021-04-12 13:34:07 · 2329 阅读 · 1 评论 -
计数排序C++实现
8.计数排序计数排序的基本思想计数排序的算法步骤C++代码实现计数排序的基本思想计数排序是一种非比较式排序,其基本思想是以空间换时间,其对特定序列的排序时间复杂度为o(n),快于任何传统的比较式排序;计数排序的核心在于将数值转化为键,存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数,其适用场景为:重复数较多的、在一定范围内的整数数列;计数排序的算法步骤获取待排序列最大元素的值(imax),申请一个大小为(imax+1)的临时数组(tmp)原创 2021-04-10 10:38:08 · 841 阅读 · 0 评论 -
堆排序C++实现
7.堆排序堆排序的基本思想堆排序的实现步骤C++代码实现堆排序的基本思想堆排序是利用堆这种数据结构而设计的一种不稳定的排序算法,时间复杂度O(N*logN),额外空间复杂度O(1),堆排序有以下特点:堆的数据结构:完全二叉树;二叉树每个节点的值都大于等于其左右子树节点的值,称为大顶堆,用来升序排序;二叉树每个节点的值都小于等于其左右子树节点的值,称为小顶堆,用来降序排序;堆排序的实现步骤利用元素下沉的方法构建一个大顶堆:从第一个父节点开始遍历,若父节点小于左(右)子节点,则父子节点交换,原创 2021-03-31 11:43:25 · 258 阅读 · 0 评论 -
归并排序C++实现
6.归并排序归并排序的基本思想代码实现适用说明归并排序的基本思想1.基本思想(递归):思路来源:两个有序序列,按序合并只需遍历一趟,效率较高;归并排序:利用分-治-合的思想,先将待排序列划分为子序列,待子序列有序(元素个数为1)后,再将子序列两两合并,从而得到完整有序的序列。2.算法步骤:申请空间,分配一个与待排数组大小相同的数组;利用递归函数,由中间位置不断划分序列,直到元素个数为1;(递去)子序列按照升(降)序两两合并;(归来)代码实现#include "pch.h"#i原创 2021-03-30 10:02:41 · 459 阅读 · 0 评论 -
快速排序C++实现
5.快速排序快速排序的基本思想代码实现快速排序的基本思想快速排序是当前最为流行的排序算法之一,其平均时间复杂度为o(nlogn),基本思想是利用分治策略,每一趟排序中选取一个元素作为中轴元素,利用该元素,将待排序列分为独立的左右两部分(左半部分都比中轴元素小,右半部分都比中轴元素大);然后对两个子序列分别递归调用快排算法,直到子序列元素个数为1,整体序列有序。具体方法:每一轮排序中,选择一个数作为中轴(默认取首元素,记下标为 [ i ] ),将其复制拿出,此位置即为一个待填的“坑”;从后向前扫描序原创 2021-03-29 14:38:24 · 262 阅读 · 0 评论 -
希尔排序C++实现
4.希尔排序希尔排序的基本思想代码实现希尔排序的基本思想1.希尔排序,也称作递减增量排序,是插入排序的一种更高效的改进版本,可将时间复杂度将至o(n^2)以下。2.希尔排序是基于插入排序的以下两点性质来改进的:传统插入排序时间复杂度为o(n^2),每轮排序内,元素后移只能移动1位;插入排序在对几乎已经排好序的数据操作时,效率高,可以达到线性排序的效率;3.基本思想:设step为步长,将待排序元素按步长分为多个组;对每个组进行插入排序,先让数列做到“组际”有序,然后减小步长,重复上述步骤原创 2021-03-25 21:18:35 · 450 阅读 · 0 评论 -
插入排序C++实现
3.插入排序插入排序的基本思想一些优化思路程序代码及验证插入排序的基本思想1.排序思想:类似摸牌,每次新摸一张,再将其插在合适的位置上(手中的牌已有序)。2.算法原理:一.构建有序序列;二.每次一个未排序数据,将其拿出;三.在已排序序列中从后向前扫描,找到相应位置并插入。3.时间复杂度为O(n^2),空间复杂度为O(1)。一些优化思路1.插入排序可改进的思路:一.提高寻找插入位置的效率;二.提高移动元素的效率。2.几种优化方案:一.对已排好序的序列,采用二分查找法寻找位置;二.数据链表化,避原创 2021-03-25 09:47:17 · 151 阅读 · 0 评论 -
选择排序C++实现
2.选择排序选择排序的基本思想选择排序的一种优化:两层循环法程序代码及验证选择排序的基本思想1.排序思想(升序):扫描整个序列,找到其中最小的一个数,将其与第一个数交换;然后,从第二个数开始向后扫描,找到最小的数与第二个数交换,以此往复直到循环n-1次,序列从低坐标向高坐标逐渐有序。2.时间复杂度:o(nn)选择排序的一种优化:两层循环法一种改进思路:每一轮扫描中,在 找出最小的数与最前面第一个无序的数交换 的基础上,找出最大的数与最后一个数交换,即每一轮扫描中对两个数进行排序。该方法下,虽然时原创 2021-03-24 09:29:46 · 242 阅读 · 0 评论 -
冒泡排序C++实现
1.冒泡排序冒泡排序基本思想循环方法的代码实现程序编译效果冒泡排序基本思想1.目标:N个乱序的数,将其以由小到大的方式排序;2.思想方法:循环遍历N-1趟,每一趟中从第一个数开始遍历,每个数与后一个数比较大小,若比后一个数大,则两数交换,直到最大的数落在其应在的位置上。3.终止条件:N-1趟全部循环完成,或者某一趟中没有发生两数交换(已经排好序了)。4.时间复杂度:o(n*n)循环方法的代码实现#include "pch.h"#include <iostream>#inclu原创 2021-03-23 11:41:54 · 1081 阅读 · 1 评论