基本排序算法
本专栏介绍了数据结构和算法中常用的8种排序算法,图文并茂,有原理的介绍,有源码的实现!
卡尔曼和玻尔兹曼谁曼
面朝大海,春暖花开
展开
-
基数排序
基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。比较官方地说,基数排序是一种基于多关键字的排序。基数排序具体过程如下: 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。 然后,从最低位开始,依次进行一次排序。这个排序并非比较大小,而是将对应的数字放置在其对应的桶中。即个位数字是0的数字放置在索引为0的原创 2017-05-25 19:54:30 · 800 阅读 · 0 评论 -
归并排序
归并排序采用分而治之(divide and conquer)的思想,通过将已经排好序的子序列合并,得到最终完全有序的序列。所以归并算法包括两大步骤:第一步是“分割”,第二步是“合并”,即先对原始序列进行分割排序,使每个子序列有序,然后再通过合并使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二路归并的过程大致如下:归并过程为:比较a[i]和b[j]的大小,若a[i]≤b[j],则将第原创 2017-05-25 14:24:39 · 749 阅读 · 0 评论 -
堆排序
堆排序采用的数据结构是完全二叉树,所以在介绍堆排序之前,我们先看看完全二叉树的定义及性质。定义一:只有最下面的两层结点度能够小于 22,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。定义二:若设二叉树的深度为 hh,除第 hh 层外,其它各层 (1~h−1)(1~h-1) 的结点数都达到最大个数,hh 层所有的结点都连续集中在最左边,这就是完全二叉树。 完全二叉树是由满二叉树而引出来的原创 2017-05-11 21:34:18 · 753 阅读 · 0 评论 -
直接选择排序
选择排序是一种简单直观的排序算法。其基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。经典的选择排序算法有:直接选择排序和堆排序。下面是直接选择排序的Java实现:// 交换数组中的两个元素public static void swap(int[] numbers, int i, int j) {原创 2017-05-11 17:57:36 · 659 阅读 · 0 评论 -
快速排序算法
快速排序算法的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。我们来看看一趟排序中如何将数据划分为两部分,使得左边部分比给定元素小,而右边部分比给定元素大。 首先,我们选定一个数字作为中轴元素用于划分数据,我们选择数据的第一个元素。 然原创 2017-05-10 17:56:50 · 1036 阅读 · 0 评论 -
冒泡排序
冒泡排序应该算是最简单的排序算法了,其过程如下: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。Java版本实现:public class So原创 2017-05-10 21:50:34 · 719 阅读 · 0 评论 -
希尔排序
希尔排序是对直接插入排序的改进,其实质就是分组插入排序,该方法又称缩小增量排序。 该算法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的一系列元素组成)分别进行直接插入排序,然后依次缩减增量再进行排序,直到增量为1(即对全体数据元素进行一次直接插入排序)。 希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快原创 2017-05-11 17:12:13 · 597 阅读 · 0 评论 -
直接插入排序
插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。经典的插入排序算法有直接插入排序和希尔排序。 直接插入排序的基本思想是:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 图示如下(自百度图片,若有侵权,请告知): Java代码原创 2017-05-11 15:34:42 · 607 阅读 · 0 评论 -
常见排序算法
注:点进链接查看算法具体实现!!!插入排序直接插入排序希尔排序交换排序冒泡排序快速排序选择排序直接选择排序堆排序归并排序基数排序总结 注:图片来自网络,侵权删!原创 2017-05-11 17:25:58 · 529 阅读 · 0 评论