排序算法
文章平均质量分 78
Origin_afan
这个作者很懒,什么都没留下…
展开
-
高级排序之快速排序
1、什么是快速排序 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序 过程可以递归进行,以此达到整个数据变成有序序列。 2、原理 1、设定一个分界值,通过其分界值将数组分为两部分。 2、将小于分界值的数组放到左边,大于/等于分界值的数组放到右边。 3、对左右两部分去重复1、2步。(可采用递归) PS:当左、右两部分的数据排序完后,整个数组的排序也就完成了原创 2020-07-13 00:42:34 · 226 阅读 · 0 评论 -
高级排序之归并排序
1、什么是归并排序 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 2、原理 1、尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是 1为止。 2、将相邻的两个子组进行合并成一个有序的大组; 3、不断的重复步骤2,直到终只有一个组为止。原创 2020-07-06 16:10:00 · 115 阅读 · 0 评论 -
高级排序之希尔排序
1、什么是希尔排序 希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。 2、原理 1、选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组; 2、对分好组的每一组数据完成插入排序; 3、减小增长量,最小减为1,重复第二步操作。 4、增长量h的确定:增长量h的值没一固定的规则,我们这里采用以下规则: int h=1 while(h < 数组长度/2){ h=2h+1;//3,7 } //循环结束后我们就可以确定h的大值; //h的减小规则原创 2020-07-05 17:53:15 · 102 阅读 · 0 评论 -
简单排序之插入排序
1、什么是插入排序 插入排序(Insertion sort)是一种简单直观且稳定的排序算法。 插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。然后,我 们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在 手中的每张牌进行比较,如下图所示: 2、原理 1、把所有的元素分为两组,已经排序的(默认为将第一个元素当为已排序的)和未排序的(剩下的元素为未排序); 2、找到未排序的组中的第一个元素,向已经排序的组中进行插入;原创 2020-07-05 17:12:37 · 484 阅读 · 0 评论 -
简单排序之选择排序
1、什么是选择排序 选择排序是一种更加简单直观的排序方法。 即:选择元素放到合适的位置 而这个选择元素不是随便选的,可以选择最小/最大 如:选择最小的元素,放到数组的第一个位置 2、原理 1、定义一个minIndex存储最小值的索引,先假设第一个索引处的值为最小,即minIndex = 0,然后遍历后面的元素,跟他们进行值的比大小,如果minIndex处的值大于其他索引处 X 的值,那么minIndex = X,如果数组还没遍历完,那么就继续找最小的,直到一次遍历结束。 2、交换第一个索引处(0)和minI原创 2020-07-05 16:23:41 · 201 阅读 · 0 评论 -
简单排序之冒泡排序
1、什么是冒泡排序 冒泡排序是一种简单的交换排序算法。它适合小规模数据的排序,并且其效率比较低。 2、原理(以正序为例,即从小到大) 1、比较相邻两个元素,若前者大于后者,则两个元素交换位置 2、对每一对相邻元素做相同的工作,从开始的第一对元素到结尾的最后一对元素。最终最后位置的元素为最大元素。 3、重复第1、2步,知道整个数组为有序的。 3、代码实现 public static void sort(int[] arr){ for (int i = arr.length-1; i >= 1原创 2020-07-05 15:25:07 · 162 阅读 · 0 评论