排序算法
十大经典排序算法
菜鸟皖皖
目前在读大学生,如果你恰好看到我,可以关注我博客和公众号,我们一起学习,一起进步!
展开
-
基数排序
基数排序介绍排序思路先以个位数的大小来对数据进行排序,接着以十位数的大小来多数进行排序,接着以百位数的大小……排到最后,就是一组有序的元素了。不过,他在以某位数进行排序的时候,是用“桶”来排序的。由于某位数(个位/十位….,不是一整个数)的大小范围为0-9,所以我们需要10个桶,然后把具有相同数值的数放进同一个桶里,之后再把桶里的数按照0号桶到9号桶的顺序取出来,这样一趟下来,按照某位数的排序就完成了为方便理解我还准备了动图:实现代码package fg;import java.util.A原创 2020-05-15 14:53:55 · 403 阅读 · 0 评论 -
计数排序
前言计数排序是一种适合于最大值和最小值的差值不是不是很大的排序。基本思想:就是把数组元素作为数组的下标,然后用一个临时数组统计该元素出现的次数,例如 temp[i] = m, 表示元素 i 一共出现了 m 次。最后再把临时数组统计的数据从小到大汇总起来,此时汇总起来是数据是有序的。实现过程为方便理解我还准备了动图:实现代码package fg;/** * @author 皖 * @data 2020.5.13 */public class Counting{ public原创 2020-05-14 18:40:43 · 235 阅读 · 0 评论 -
桶排序
桶排序介绍桶排序就是把最大值和最小值之间的数进行瓜分,例如分成 10 个区间,10个区间对应10个桶,我们把各元素放到对应区间的桶中去,再对每个桶中的数进行排序,可以采用归并排序,也可以采用快速排序之类的。之后每个桶里面的数据就是有序的了,我们在进行合并汇总。为方便理解我还准备了图片:实现原理为了让大家更好的对桶排序理解,下面形象生动的画出几个桶,其实过程并不复杂,大家可以看到图中分为几个桶,然后在桶里面进行排序,这样子就快了许多,然后合并就是了。实现代码package fg;impo原创 2020-05-14 18:36:08 · 263 阅读 · 0 评论 -
堆排序
堆排序介绍堆排序:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构。并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子堆结构该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义原创 2020-05-12 17:17:53 · 275 阅读 · 0 评论 -
快速排序
前言我们从数组中选择一个元素,我们把这个元素称之为中轴元素吧,然后把数组中所有小于中轴元素的元素放在其左边,所有大于或等于中轴元素的元素放在其右边,显然,此时中轴元素所处的位置的是有序的。也就是说,我们无需再移动中轴元素的位置。从中轴元素那里开始把大的数组切割成两个小的数组(两个数组都不包含中轴元素),接着我们通过递归的方式,让中轴元素左边的数组和右边的数组也重复同样的操作,直到数组的大小为1,此时每个元素都处于有序的位置。为方便理解我还准备了动图:实现代码package fg;public原创 2020-05-12 17:10:03 · 214 阅读 · 0 评论 -
归并排序
将一个大的无序数组有序,我们可以把大的数组分成两个,然后对这两个数组分别进行排序,之后在把这两个数组合并成一个有序的数组。由于两个小的数组都是有序的,所以在合并的时候是很快的。还可以通过递归的方式将大的数组一直分割,直到数组的大小为 1,此时只有一个元素,那么该数组就是有序的了,之后再把两个数组大小为1的合并成一个大小为2的,再把两个大小为2的合并成4的 …… 直到全部小的数组合并起来。为方便理解我还准备了动图:实现过程:实现代码package fg;class Main { pu原创 2020-05-10 11:54:04 · 233 阅读 · 0 评论 -
希尔排序
希尔排序可以说是插入排序的一种变种。无论是插入排序还是冒泡排序,如果数组的最大值刚好是在第一位,要将它挪到正确的位置就需要 n - 1 次移动。也就是说,原数组的一个元素如果距离它正确的位置很远的话,则需要与相邻元素交换很多次才能到达正确的位置,这样是相对比较花时间了。希尔排序就是为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序。希尔排序的思想是采用插入排序的方法,先让数组中任意间隔为 h 的元素有序,刚开始 h 的大小可以是 h = n / 2,接着让 h = n / 4,让原创 2020-05-09 10:29:21 · 220 阅读 · 0 评论 -
选择排序
过程简单描述:首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法我们称之为选择排序。为方便理解我还准备了动图:public class SelectSort { public static int[] sele...原创 2020-05-07 20:34:23 · 227 阅读 · 0 评论 -
插入排序
前言: 我们在玩打牌的时候,你是怎么整理那些牌的呢?一种简单的方法就是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。当我们给无序数组做排序的时候,为了要插入元素,我们需要腾出空间,将其余所有元素在插入之前都向右移动一位,这种算法我们称之为插入排序。过程描述:1、从数组第2个元素开始抽取元素。2、把它与左边第一个元素比较,如果左边第一个元素比它大,则继续与左边第...原创 2020-05-07 20:30:36 · 263 阅读 · 0 评论 -
冒泡排序
冒泡排序介绍冒泡排序就是把把第一个元素与第二个元素比较,如果第一个比第二个大,则交换他们的位置。接着继续比较第二个与第三个元素,如果第二个比第三个大,则交换他们的位置….我们对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样一趟比较交换下来之后,排在最右的元素就会是最大的数。除去最右的元素,我们对剩余的元素做同样的工作,如此重复下去,直到排序完成。为方便理解我还准备了动图:...原创 2020-05-07 20:24:46 · 363 阅读 · 0 评论