![](https://img-blog.csdnimg.cn/2021072609355987.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
排序与查找
文章平均质量分 62
排序与查找
农村小白i
奋斗的农村小白
展开
-
拓扑排序
拓扑排序 在现实生活中,我们经常会同一时间接到很多任务去完成,但是这些任务的完成是有先后次序的。 此时如果某个同学要完成这些任务,就需要指定出一个任务方案,我们只需要对图中的顶点进行排序,让它转换为一个线性序列,就可以解决问题,这时就需要用到一种叫拓扑排序的算法。 拓扑排序: 给定一副有向图,将所有的顶点排序,使得所有的有向边均从排在前面的元素指向排在后面的元素,此时就可以明确的表示出每个顶点的优先级。下列是一副拓扑排序后的示意图: 1. 检测有向图中的环 如果学习x课程前必须先学习y课程,学习y课程前原创 2021-08-26 07:45:43 · 248 阅读 · 0 评论 -
二分查找(折半查找)
二分查找(折半查找) 1. 原理 2. 代码实现 /** * 二分查找 */ public class binarySearch { /* 对数组内的元素进行查找 */ public int search(Comparable[] arr, Comparable target) { int left = 0; int right = arr.length - 1; int mid = (left + right) / 2;原创 2021-08-21 23:00:59 · 121 阅读 · 0 评论 -
堆排序
堆排序 给定一个数组: String[] arr = {“S”,“O”,“R”,“T”,“E”,“X”,“A”,“M”,“P”,“L”,“E”} 请对数组中的字符按从小到大排序。 AP设计: 类名 HeapSort<T extends Comparable> 成员方法 1.public static void sort(Comparable[] source):对source数组中的数据从小到大排序2.private static void createHeap(Compa原创 2021-08-03 07:12:04 · 79 阅读 · 0 评论 -
快速排序(冒泡排序的升级)
快速排序 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排过程可以递归进行,以此达到整个数据变成有序序列。 需求: 排序前:{6, 1, 2, 7, 9, 3, 4, 5, 8} 排序后:{1, 2, 3, 4, 5, 6, 7, 8, 9} 排序原理: 1.首先设定一个分界值,通过该分界值将数组分成左右两部分; 2.将大于或等于分界值的数据放到到数组右边,小原创 2021-07-27 06:45:20 · 286 阅读 · 0 评论 -
归并排序
归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 需求: 排序前:{8,4,5,7,1,3,6,2} 排序后:{1,2,3,4,5,6,7,8} 排序原理: 1.尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止。 2.将相邻的两个子组进行合并成一个有序的大组; 3.不断原创 2021-07-26 23:59:17 · 54 阅读 · 0 评论 -
希尔排序(插入排序的升级)
希尔排序(插入排序的升级) 希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。 前面学习插入排序的时候,我们会发现一个很不友好的事儿,如果已排序的分组元素为{2,5,7,9,10},未排序的分组元素为{1,8},那么下一个待插入元素为1,我们需要拿着1从后往前,依次和10,9,7,5,2进行交换位置,才能完成真正的插入,每次交换只能和相邻的元素交换位置。那如果我们要提高效率,直观的想法就是一次交换,能把1放到更前面的位置,比如一次交换就能把1插到2和5之间,这样一次交换1原创 2021-07-26 18:03:16 · 102 阅读 · 0 评论 -
插入排序
插入排序 插入排序(Insertion sort)是一种简单直观且稳定的排序算法。 插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较,如下图所示: 需求: 排序前:{4,3,2,10,12,1,5,6} 排序后:{1,2,3,4,5,6,10,12} 排序原理: 1.把所有的元素分为两组,已经排序的和未排序的; 2.找到未排序的组中的第原创 2021-07-26 16:25:57 · 47 阅读 · 0 评论 -
选择排序
选择排序 选择排序是一种更加简单直观的排序方法。 需求: 排序前:{4,6,8,7,9,2,10,1} 排序后:{1,2,4,5,7,8,9,10} 排序原理: 1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引 2.交换第一个索引处和最小值所在的索引处的值 选择排序API设计: 类名 Selection 构造方法 Selection():创建Sel原创 2021-07-26 16:04:28 · 46 阅读 · 0 评论 -
冒泡排序
冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 需求: 排序前:{4,5,6,3,2,1} 排序后:{1,2,3,4,5,6} 排序原理: 比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。 冒泡排序API设计: 类名 Bubble 构造方法 Bubble():创建Bubble对象 成员方法 1.public原创 2021-07-26 10:27:22 · 57 阅读 · 0 评论