排序算法
十大排序详解
zhumqs
这个作者很懒,什么都没留下…
展开
-
排序算法(1)------冒泡排序
冒泡排序是非常容易理解和实现,以从小到大排序举例:设数组长度为N。 1. 比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。 2. 这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。 3. N=N-1,如果N不为0就重复前面二步,否则排序完成。冒泡排序1 //冒泡1 public void bubbl...原创 2018-08-27 16:03:47 · 242 阅读 · 0 评论 -
排序算法(2)------直接插入排序
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为 a[0…n-1]。 1. 初始时, a[0]自成 1 个有序区,无序区为 a[1..n-1]。 令 i=1 2. 将 a[i]并入当前的有序区 a[0…i-1]中形成 a[0…i]的有序区间。 3.i++并重复第二步...原创 2018-08-27 16:11:33 · 187 阅读 · 0 评论 -
排序算法(3)------希尔排序
希尔排序的实质就是分组插入排序, 该方法又称缩小增量排序,因 DL. Shell于 1959 年提出而得名。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的...原创 2018-08-27 16:24:11 · 305 阅读 · 0 评论 -
排序算法(4)------直接选择排序
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。设数组为a[0…n-1]。 1. 初始时, 数组全为无序区为 a[0..n-1]。 令i=0 2. 在无序区 a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后 a[0…...原创 2018-08-27 16:33:30 · 159 阅读 · 0 评论 -
排序算法(5)------归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。归 //递归排序(归) public void m...原创 2018-08-27 16:39:15 · 138 阅读 · 0 评论 -
排序算法(6)------快速排序
快速排序由于排序效率在同为 O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想——分治法也确实非常实用, 因此很多软件公司的笔试面试,包括像腾讯,微软等知名 IT 公司都喜欢考这个, 还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。快速排序是 C.R.A.Hoare 于 1962 年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(...原创 2018-08-27 16:55:56 · 281 阅读 · 0 评论 -
排序算法(7)------堆排序
前言堆排序、快速排序、归并排序的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用到的操作。比如我们建堆的时候可以采用堆的插入操作(将元素插入到适当的位置,使新的序列仍符合堆的定义)将元素一个一个地插入到堆中,但其实我们完全没必要这么做,我们有执行操作更少的方法,后面你会看到,我们基本上只用到了堆的...转载 2018-08-27 17:21:43 · 217 阅读 · 0 评论 -
排序算法(8)------计数排序
前言计数排序、基数排序和桶排序三种排序算法由于都不是基于比较的排序,因此这三种排序算法可以以线性时间运行。但是因为限制条件的特殊性,因此应用面没有基于元素比较的排序算法广,但是在很多特定的情况下还是蛮有用途的,而且效率极高。计数排序是建立在这样的前提条件下的:假设n个输入元素的每一个都是0到k区间内的一个整数,其中k为某个整数。因此我们后面所写的程序也只是针对0到k之间的元素进行排序,换句...转载 2018-08-27 17:42:54 · 213 阅读 · 0 评论 -
排序算法(9)------基数排序
基数排序的排序时间也可以达到线性,尤其在k和d(后面介绍该参数)很小的情况下。基数排序采取的是多关键字比较的策略,且每个关键字对排序的影响不同,根据关键字影响的主次,有两种排序方法:1、先根据影响最大的关键字来排序,而后在该关键字相同的情况下,再根据影响次之的关键字来排序,依此类推,直到最后按照影响最小的关键字排序后,序列有序。我们称这个为先高位后低位。2、先根据影响最小的关键字来排序...转载 2018-08-27 17:51:35 · 236 阅读 · 0 评论 -
排序算法(10)------桶排序
桶排序原创 2018-09-03 15:01:04 · 380 阅读 · 0 评论