
排序算法
常见排序算法
yTiany111
这个作者很懒,什么都没留下…
展开
-
排序算法之基数排序
基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法...原创 2020-02-23 13:27:17 · 216 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序冒泡排序改良版代码实现void BubbleSort(int* arr, int len){ bool flag=false; for(int i=0;i<len&&!flag;i++) { flag=true; for(int j=0;j<len-i;j++) { if(arr[j+1]<arr[j]) ...原创 2020-02-10 16:57:37 · 183 阅读 · 0 评论 -
排序算法之选择排序
选择排序思路升序排列给定一无序数组,将数组第一个元素的下标设为i,第二个元素的下标设为j。从数组第二个元素开始往后遍历,遍历过程中逐一与数组第一个元素进行比较,若找到比第一个元素小的元素,则将该元素下标记录,并将该元素索引处的值换为下个与j索引值比较的目标,,一次循环后找到最小值的索引下标。将最小值的索引所的值与第一个元素交换。重复上述循环具体排序过程如图所示:代码实现...原创 2020-02-10 16:49:57 · 160 阅读 · 0 评论 -
排序算法之插入排序与希尔排序
插入排序插入排序的核心思想为:将无序序列插入到有序序列之中思路1.给定一个数组,默认将数组的第一个元素作为有序数组,将其他元素作为无序数组,并将无序数组的第一个元素用临时变量保存下来2.从数组的第二个的元素(即 无序数组的第一个元素 )开始遍历,循环的与有序数组进行比较,根据大小插入到有序数组的相关位置举例:给定无序数组 [ 4 3 6 2 1 9 8 7 ]相关过程如图所示:代...原创 2020-02-10 16:01:53 · 159 阅读 · 0 评论 -
排序算法之归并排序(C++)
归并排序归并排序核心思想:将两个有序序列合并成一个有序序列整体排序思路取无序序列的中间数,将一个无序序列分成左右两个数组对左右两侧的数组分别重复1过程,直到分离成一个个的有序数组,即分离成单个数,如图所示对其分离的有序数组分别进行合并(一个数的数组默认为有序数组),最终合并成一个有序序列,如下图所示将两个有序序列合并成一个有序序列的合并算法分析上述过程中的核心在于如何将两个有...原创 2020-02-10 11:46:03 · 295 阅读 · 0 评论 -
排序算法之快速排序(C++)
快速排序快速排序:以一个元素为准,将序列分成左小右大,然后递归在序列完全无序的情况下效率最高思路举例:对序列 **[5 4 7 9 8 2 6 1 3]**进行快速排序选取第一个数为参考数,并将第一个数存放在临时变量里将比参考数大的放在参考数的右边,比参考数小的放在参考数的左边然后对参考数的左右两侧的数分别进行递归代码实现void QuickSort(int* arr,in...原创 2020-02-09 23:27:56 · 203 阅读 · 0 评论 -
排序算法之堆排序(C++)
堆排序堆排序: 通过将数组的元素转化成完全二叉树,并将完全二叉树转化为大顶堆(升序)或者小顶堆(降序),通过循环逐次获取最大值或最小值达到排序的目的。思路· 升序为例(大顶堆)将数组转化成完全二叉树,其中最后一个非叶子节点的下标为 (数组长度/2-1),任意节点(非叶子节点)的左子树为2*i+1,右子树为2*i+2(i为数组下标)。从最后一个非叶子节点往前遍历,将每个子树调整为大顶堆,...原创 2020-02-09 21:46:53 · 263 阅读 · 0 评论