排序
文章平均质量分 59
Java小白中的菜鸟
水调歌头
展开
-
排序--希尔排序(Shell Sort)
希尔排序(Shell Sort)是插入排序的一种更高效的改进版本,由Donald Shell于1959年提出。它通过将原始数据集合分成多个子序列,先让这些子序列基本有序,然后再对全体记录进行一次直接插入排序,从而达到整个数据变得基本有序的目的。希尔排序的关键在于其增量序列的选择,常见的增量序列有希尔增量(Hibbard增量,如h=1, 3, 7, ...)、霍纳法则增量(H.C. Hibbard、J.S. Demuth提出的,如h=2^k-1)等。原创 2024-05-16 18:00:44 · 255 阅读 · 0 评论 -
排序-基数排序(Radix Sort)
基数排序(Radix Sort)是一种非比较型整数排序算法,它通过将整数按位数切割成不同的数字,然后按每个数位分别比较来进行排序。基数排序的工作方式类似于人们在图书馆按照书的类别、书架号、书序号来定位书籍的过程,是一种典型的分配式排序算法。原创 2024-05-16 17:42:01 · 379 阅读 · 0 评论 -
排序-计数排序(Counting Sort)
时间复杂度:O(n+k),在数据范围k不是很大时,此算法非常高效。空间复杂度:O(k),需要额外的计数数组,空间消耗与数据范围成正比。稳定性:计数排序是稳定的排序算法,即相等的元素的相对顺序不会改变。适用场景:适用于数据范围不大的整数排序,尤其当输入数据是均匀分布时效率更高。计数排序由于其对整数的限制和对空间的需求,在处理特定类型的排序问题时非常有效,但并不适用于所有类型的排序需求。在数据范围过大或者数据类型不是整数时,应考虑其他排序算法。计数排序的实现示例图:/* 计数排序 */原创 2024-05-14 11:46:26 · 312 阅读 · 0 评论 -
排序-桶排序(Bucket Sort)
它的工作原理是将数组分到有限数量的桶子里,每个桶再个别排序(通常使用插入排序或其他简单排序算法),最后将所有桶中的元素合并成一个有序数组。例如,我们想要将淘宝上的所有商品按价格范围平均分配到 10 个桶中,但商品价格分布不均,低于 100 元的非常多,高于 1000 元的非常少。分配方式通常是计算元素值与最小值的差值,然后除以桶的间隔(数据范围除以桶的数量),得到的结果即为元素应放入的桶的索引。桶的数量和数据范围有关,通常根据待排序数据的最大值和最小值来决定桶的数量,以保证数据分布的均衡。原创 2024-05-14 10:03:03 · 158 阅读 · 0 评论 -
排序-堆排序(Heap Sort)
堆排序(Heap Sort)是一种基于比较的排序算法,它利用了完全二叉树的特性,将待排序的序列构造成一个大顶堆(每个父节点的值都大于或等于其子节点的值)或小顶堆(每个父节点的值都小于或等于其子节点的值),然后通过交换堆顶元素与最后一个元素并调整剩余元素为新的堆,以此达到排序的目的。堆排序的时间复杂度为O(n log n),并且它是不稳定的排序算法。原创 2024-05-14 09:37:45 · 167 阅读 · 0 评论 -
排序-归并排序(merge sort)
归并排序(Merge Sort)是一种分而治之的算法,它将原始数组分成越来越小的子数组,直到每个子数组只有一个元素,然后将这些子数组两两合并,过程中保持排序状态,最终合并成一个完全有序的数组。归并排序是一种稳定的排序算法,其主要特点是效率高且易于理解。原创 2024-05-13 17:40:32 · 255 阅读 · 0 评论 -
排序-快速排序(Quick Sort)
快速排序(Quick Sort)是一种高效的排序算法,采用分治法的策略,其基本思想是选择一个基准元素,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。原创 2024-05-13 15:54:23 · 286 阅读 · 0 评论 -
排序-插入排序的优化--半插入排序
半插入排序(有时也称为二分查找插入排序)是对传统插入排序的一种优化。基本思想是在执行插入操作时,不是简单地从前向后遍历已排序序列来寻找插入位置,而是使用二分查找法来确定新元素的正确位置,从而减少比较次数,提高效率。虽然这种改进减少了比较操作,但元素的移动次数并未减少,因此整体时间复杂度仍然是O(n^2)。原创 2024-05-13 15:08:46 · 249 阅读 · 0 评论 -
排序-插入排序
插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在小规模或者部分已排序的数据集上表现良好。原创 2024-05-13 15:05:27 · 203 阅读 · 0 评论 -
排序-冒泡排序(bubble sort)
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,就如同水底的气泡一样逐渐向上冒。原创 2024-05-13 14:14:38 · 463 阅读 · 0 评论 -
排序-选择排序(selection sort)
的工作原理非常简单:开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾。选择排序(selection sort)原创 2024-05-13 14:03:09 · 179 阅读 · 0 评论