排序
算法,排序专题
来老铁干了这碗代码
算法爱好者 终生学习践行者 雨雪刀霜阻不住 不成大神誓不休
展开
-
【自定义排序规则】剑指 Offer 45. 把数组排成最小的数
我是小张同学,立志用更简洁的代码做更高效的表达输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: “102” 示例 2:输入: [3,30,34,5,9]输出: “3033459”提示:0 < nums.length <= 100说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0核心思路:自定义排序原创 2021-09-14 12:16:43 · 125 阅读 · 0 评论 -
【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
【GIF动画+完整可运行源代码】C++实现 冒泡排序——十大经典排序算法之一【GIF动画+完整可运行源代码】C++实现 选择排序——十大经典排序算法之二【GIF动画+完整可运行源代码】C++实现 插入排序——十大经典排序算法之三【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四【GIF动画+完整可运行源代码】C++实现 归并排序——十大经典排序算法之五【GIF动画+完整可运行源代码】C++实现 快速排序——十大经典排序算法之六【GIF动画+完整可运行源代码】C++实现原创 2020-10-19 08:42:53 · 1097 阅读 · 0 评论 -
【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。算法步骤:取得数组中的最大数,并取得位数;arr为原始数组,从最低位开始取每个位组成radix数组;对radix进行计数排序(利用计数排序适用于小范围数的特点);代码展示#include<iostream> using namespace std;原创 2020-10-19 08:36:09 · 914 阅读 · 0 评论 -
C++实现桶排序——十大经典排序算法之九【GIF动画+完整代码+详细注释】
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。算法步骤:设置一个定量的数组当作空桶;遍历输入数据,并且把数据一个一个放到对应的桶里去;对每个不是空的桶进行排序;从不是空的桶里把排好序的数据拼接起来。/*算法:桶排序*/ #include <ios原创 2020-10-19 08:35:44 · 1474 阅读 · 0 评论 -
【GIF动画+完整可运行源代码】C++实现 计数排序——十大经典排序算法之八
计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。算法步骤:找出待排序的数组中最大和最小的元素;统计数组中每个值为i的元素出现的次数,存入数组C的第i项;对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。代码展示#include <iostrea原创 2020-10-19 08:35:15 · 940 阅读 · 0 评论 -
【GIF动画+完整可运行源代码】C++实现 堆排序——十大经典排序算法之七
堆排序Heapsort是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法步骤:将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2…n-1]<=R[n];由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,原创 2020-10-18 21:20:01 · 814 阅读 · 0 评论 -
【GIF动画+完整可运行源代码】C++实现 快速排序——十大经典排序算法之六
1.快排的实现逻辑:先从数列中取出一个数作为基准数(通常取第一个数)。遍历序列,将比它小的数与比它大的数分别记录下来,分为两类,最后该数放在这两类数中间(它左边的所有数都比它小,右边的所有数都比它大)分别遍历左右区间,重复,直到各区间只有一个数2. 动态演示代码实现#include<bits/stdc++.h> using namespace std;void QuickSort(int *arr, int left, int right) { if(left &g原创 2020-10-18 21:17:17 · 1001 阅读 · 0 评论 -
【GIF动画+完整可运行源代码】C++实现 冒泡排序——十大经典排序算法之一
冒泡排序重复地遍历待排序的数列,每次比较两个相邻元素,如果它们的顺序错误就把它们交换。重复地进行遍历直到没有再需要交换时表示数列已经排序完成。算法步骤:比较相邻的元素:若第一个比第二个大,则交换;遍历开始第一对到结尾最后一对,执行步骤1;重复步骤1~2,直到排序完成。代码展示#include<iostream>using namespace std;void print(int a[],int n);void bubbleSort(int a[], int n原创 2020-10-18 20:53:36 · 1215 阅读 · 0 评论 -
【GIF动画+完整可运行源代码】C++实现 选择排序——十大经典排序算法之二
选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法步骤:初始状态:无序序列为R[0,n−1],长度n,有序区为空;第i=1,…,n−1趟排序从当前无序区R[i−1,n−1]中选出最小的元素R[k],并将它与无序区的第1个记录R[i−1]交换,则R[0,i−1]变为元素个数增加1的新有序区,R[i,n−1]变为元素个数减少1的新无序区;n−1原创 2020-10-18 20:57:11 · 2133 阅读 · 8 评论 -
【GIF动画+完整可运行源代码】C++实现 归并排序——十大经典排序算法之五
简介:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,是采用分治法Divide and Conquer的一个非常典型的应用。分Divide:将问题分成一些小的问题然后递归求解;治Conquer:将分的阶段得到的各答案合并在一起。算法步骤:把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。***#### 代码展示#include<bits/stdc++.h>using n原创 2020-10-18 21:13:10 · 836 阅读 · 0 评论 -
【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四
希尔排序由Shell在1959年发明,又叫缩小增量排序,是第一个突破O(n^2)的排序算法,属于简单插入排序的改进版,会优先比较距离较远的元素。算法步骤:选择一个增量序列T1,T2,…,Tk, 其中Ti>Tj,Tk=1, i>j;每趟排序,根据对应的增量Ti,将待排序列分割成若干子序列,分别对各子序列进行直接插入排序;按增量序列个数k,对序列进行k趟排序。希尔排序实例:下图的增量序列为:5,2,1,第一趟排序将增量为5的子序列进行插入排序,第二趟排序将增量为2的子序列进行插原创 2020-10-18 21:07:48 · 917 阅读 · 0 评论 -
【GIF动画+完整可运行源代码】C++实现 插入排序——十大经典排序算法之三
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法步骤:从第一个元素开始,该元素认为已经被排序;取下一个元素,在已经排序的元素序列中从后向前扫描;如果已排序元素大于新元素,将已排序元素移到下一位置;重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;将新元素插入到该位置后;重复步骤2~5。代码展示#include <iostream> using namespace std;/原创 2020-10-18 21:02:32 · 919 阅读 · 0 评论 -
23行代码_动图展示——快排详解(排序最快的经典算法)
快排1.快排的实现逻辑:先从数列中取出一个数作为基准数(通常取第一个数)。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步,直到各区间只有一个数。2. 动态演示代码实现#include<cstdio>void Quick_sort(int a, int low, int high) { int i = low; int j = high; if(i > j) return 0; int temp = a[lo原创 2020-09-16 09:34:02 · 1073 阅读 · 1 评论