排序算法
无意呢
进击的程序猿
展开
-
【排序算法(一)】选择排序及其改进
选择排序是一种原地排序算法。适用于小文件。由于选择操作是基于键值的交换在需要时才执行,所以选择排序常用于数值较大和键值较小的文件。优点容易实现原地排序(不需要额外的存储空间)缺点扩展性较差 :O(N2N^2N2)算法寻找未排序序列中的最小值用当前位置交换最小值堆所有元素重复上述过程,直到整个序列排序完成Java版本实现public voi...原创 2019-02-07 13:41:04 · 1403 阅读 · 0 评论 -
【排序算法(八)】排序算法总结(上)
总结选择排序算法准则每种排序算法都各有优缺点。因此,在实用时需根据不同情况适当选用,甚至可以将多种方法结合起来使用。影响排序的因素有很多,平均时间复杂度低的算法并不一定就是最优的。相反,有时平均时间复杂度高的算法可能更适合某些特殊情况。同时,选择算法时还得考虑它的可读性,以利于软件的维护。一般而言,需要考虑的因素有以下四点:待排序的记录数目n的大小;记录本身数据量的大小,也就...原创 2019-02-09 21:56:56 · 410 阅读 · 0 评论 -
【排序算法(七)】基数排序
基本思想基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。通过基数排序对数组{53, 3, 542, 748, 14, 214, 154, 63...原创 2019-02-09 19:28:47 · 12365 阅读 · 2 评论 -
【排序算法(六)】快速排序
基本思想快速排序也是基于分治算法的。步骤如下:(1)选择一个基准元素,通常选择第一个元素或者最后一个元素;(2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基 准元素值小。另一部分记录的元素值比基准值大;(3)此时基准元素在其排好序后的正确位置;(4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序如下图...原创 2019-02-09 15:05:46 · 434 阅读 · 0 评论 -
【数据结构】堆应用之堆排序
如何实现堆堆排序首先建立一个最大堆,然后将堆顶元素与末尾元素进行交换,使末尾元素最大。然后调整堆的大小(即堆元素-1),然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大元素。如此反复进行交换、重建、交换。直至堆剩下一个元素后将得到一个递增的有序序列。Java版本实现//堆排序 public void HeapSort(int[] a , int n ) { while(n ...原创 2019-01-28 21:23:37 · 275 阅读 · 0 评论 -
【排序算法(五)】归并排序
基本思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分治算法的一般步骤:(1)分解,将要解决的问题划分成若干规模较小的同类问题;(2)求解,当子问题划分得足够小时,...原创 2019-02-08 20:11:00 · 1252 阅读 · 0 评论 -
【排序算法(四)】希尔排序
基本思想希尔排序是基于插入排序的,又叫缩小增量排序。在插入排序中,标记符左边的元素是有序的,右边的是没有排过序的,这个算法取出标记符所指向的数据,存入一个临时变量,接着,在左边有序的数组中找到临时变量应该插入的位置,然后将插入位置之后的元素依次后移一位,最后插入临时变量中的数据。试想,假如有一个很小的数据项在靠近右端的位置上,把这个数据项插入到有序数组中时,将会有大量的中间数据项需要右移一...原创 2019-02-09 22:29:45 · 274 阅读 · 0 评论 -
【排序算法(三)】直接插入排序及其改进
基本思想直接插入排序是一种简单且有效的比较排序算法,在每次迭代过程中算法随机地从输入序列中移除一个元素,并将该元素插入待排序序列的正确位置,重复该过程,直到所有输入元素都被选择一个。例子:给定一个序列:6 8 1 4 5 3 7 2 ,按升序排序 6 8 1 4 5 3 7 2 (考虑索引0) 6 8 1 4 5 3 7 2 (考虑索引...原创 2019-02-07 23:35:31 · 2107 阅读 · 1 评论 -
【排序算法(二)】冒泡排序及其改进
基本思想对当前还未排好序的范围内的全部数,自上而下对相邻的俩个数依次进行比较和调整,让较大的数下沉,较小的数往上冒。即:每当俩相邻的数比较后发现他们的排序与排序的要求相反时,就将他们交换。每次遍历都可确定一个最大值放到待排数组的末尾,下次遍历,对该最大值以及它之后的元素不再排序(已经排好)。由于冒泡排序算法交换和比较的操作次数都与N2成正比,由于在大O表示法中,常数忽略不计,冒泡排序的时间...原创 2019-02-07 16:42:27 · 418 阅读 · 0 评论 -
【排序算法(八)】排序算法总结(下)
1. 八大排序算法目录总结所有排序算法源码地址: https://github.com/WeCanRun/Sorting-Algorithm【排序算法(一)】选择排序及其改进【排序算法(二)】冒泡排序及其改进【排序算法(三)】直接插入排序及其改进【排序算法(四)】希尔排序【排序算法(五)】归并排序【排序算法(六)】快速排序【排序算法(七)】基数排序【数据结构】堆应用之堆排序【...原创 2019-07-25 10:42:59 · 207 阅读 · 0 评论