排序
排序!!!
Rewind-922
我们一日日度过的所谓的日常,实际上可能是接连不断的奇迹!!!
展开
-
六、高级排序---快速排序
一、排序原理 1.首先设定一个分界值,通过该分界值将数组分成左右两部分; 2.将大于或等于分界值的数据放到到数组右边,小于分界值的数据放到数组的左边。此时左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值; 3.然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 4.重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当原创 2020-11-01 16:13:15 · 185 阅读 · 1 评论 -
五、高级排序---归并排序
一、 排序原理 尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止。 将相邻的两个子组进行合并成一个有序的大组; 不断的重复步骤2,直到最终只有一个组为止。 1. 运用分治思想 2. 排序 二、代码实现 public class Merge { //归并所需要的辅助数组 private static Comparable[] assist; /* 比较v元素是否小于w元素 */ privat原创 2020-10-31 19:21:18 · 85 阅读 · 0 评论 -
四、高级排序---希尔排序(Shell Sort)
1. 引言 基础排序,包括冒泡排序,选择排序还有插入排序,并且对他们在最坏情况下的时间复杂度做了分析,发现都是O(N^2),而平方阶通过我们之前学习算法分析我们知道,随着输入规模的增大,时间成本将急剧上升,所以这些基本排序方法不能处理更大规模的问题,接下来我们学习一些高级的排序算法,争取降低算法的时间复杂度最高阶次幂。 希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。 插入排序缺点:如果已排序的分组元素为{2,5,7,9,10},未排序的分组元素为{1,8}原创 2020-10-30 10:36:28 · 158 阅读 · 0 评论 -
三、简单排序---插入排序(Insertion Sort)
1. 排序思路 把所有的元素分为两组,已经排序的和未排序的; 找到未排序的组中的第一个元素,向已经排序的组中进行插入; 倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待 插入元素放到这个位置,其他的元素向后移动一位; 2. 代码实现 public class Insertion { /* 对数组a中的元素进行排序 */ public static void sort(Comparable[] a){原创 2020-10-29 10:49:25 · 157 阅读 · 0 评论 -
二、简单排序---选择排序(Selection Sort)
1. 排序思路 每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处 的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引 交换第一个索引处和最小值所在的索引处的值 2. 代码实现 public class Selection { /* 对数组a中的元素进行排序 */ public static void sort(Comparable[] a){ for(i原创 2020-10-29 10:43:07 · 277 阅读 · 0 评论 -
一、简单排序---冒泡排序(Bubble Sort)
1.冒泡排序原理 比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。 再次从开始到倒数第二个元素比较,确定第二大的值,之后以此类推。 2. 代码实现 //排序代码 public class Bubble { /* 对数组a中的元素进行排序 */ public static void sort(Comparab[] a){ for(int i=a.length-1;i>原创 2020-10-28 11:10:17 · 143 阅读 · 0 评论