
排序算法
saber@p
星辰滚烫不如麻辣烫
展开
-
快排模板
快排很久没写了,原来的实现思路有点绕,今晚请教了一个好友,兄弟给我提供了另外一种实现的思路,发现比较好记,处理更加简单,觉得很赞 记录下原创 2021-04-18 21:51:37 · 206 阅读 · 0 评论 -
基数排序
像冒泡,选择,插入,堆,归并,希尔,快速 排序,这些是基于比较的 排序而计数排序,桶排序,基数排序 这些都不是基于比较的排序,采用的思想是 以空间换时间下面来介绍一下基数排序因为数字的每一位都是通过0 ~ 9 组成 ,那么我们只需要对每一位数 进行排序,最后整体就有序需要先得出他的最大值 和 最小值 ,这样就能得出 推断出他的位数,对每一位采取计数排序下面的代码版本是 用于正数整数的基数排序/** * 基数排序 */public class BaseSort { public st原创 2021-03-02 22:50:36 · 124 阅读 · 0 评论 -
计数排序
像冒泡,选择,插入,堆,归并,希尔,快速 排序,这些是基于比较的 排序而计数排序,桶排序,基数排序 这些都不是基于比较的排序,采用的思想是 以空间换时间下面来介绍一下计数排序计数的排序的核心思想通过统计每个整数在序列中出现的次数,进而推导出每个整数在有序序列中的索引因为要计算出排完顺序后 每个整数的最大位置,所以需要开辟一个数组进行存储数组的长度 : 最大值 - 最小值数组的定义 : 每个整数 - 最小值 就得到这个整数的索引数组的值 : 排完顺序后 整数的最大位置原创 2021-03-02 21:02:32 · 92 阅读 · 0 评论 -
快速排序
快速排序是对冒泡排序的一种改进。它的基本思想是:**通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。**排序原理(1)首先设定一个分界值,通过该分界值将数组分成左右两部分;(2)将大于或等于分界值的数据放到到数组右边,小于分界值的数据放到数组的左边。此时左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值;(3)然后,左边原创 2020-10-18 15:34:01 · 183 阅读 · 0 评论 -
归并排序
思想(1)尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止。(2)将相邻的两个子组进行合并成一个有序的大组;(3)不断的重复步骤2,直到最终只有一个组为止。API设计归并的原理定义一个辅助数组 和两个辅助指针代码实现import org.junit.Test;import java.util.Arrays;/** * 归并排序 */public class Merge { /** * 完成归原创 2020-10-18 11:55:48 · 2838 阅读 · 0 评论 -
希尔排序
思想 (1)选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组; (2)**对分好组的每一组数据完成插入排序**; (3)减小增长量,最小减为1,重复第二步操作。增长量h的确定:增长量h的值每一固定的规则,我们这里采用以下规则: //确定增长量的最大值 int N=a.length; int h=1; while (h<N/2){ h=h*2+1; }API设计代码原创 2020-10-18 10:57:45 · 210 阅读 · 1 评论 -
插入排序
思想(1)把所有的元素分为两组,已经排序的和未排序的;(2)找到未排序的组中的第一个元素,向已经排序的组中进行插入;(3)倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位;API设计代码实现import org.junit.Test;import java.util.Arrays;/** * 插入排序 */public class Insertion { /** *原创 2020-10-18 10:29:50 · 118 阅读 · 0 评论 -
选择排序法
思想(1)每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引(2)交换第一个索引处和最小值所在的索引处的值API设计代码实现/** * 选择排序 */public class Selection { /** * 对数组内的元素进行排序 * */ public static void sort(Compar原创 2020-10-18 10:08:56 · 282 阅读 · 0 评论 -
冒泡排序法
思想(1)比较相邻的元素,如果前面的比后面的大,就交换元素索引位置(2)对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。## API的设计代码实现/** * 冒泡排序算法实现 */public class Buddle { /** * 对数组内的元素进行排序 * @param a */ public static void sort(Comparable[] a){ for原创 2020-10-18 09:32:53 · 251 阅读 · 3 评论