
算法
老范183
啥也不是
展开
-
排序算法笔记索引
博客链接 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 基数排序(还没复习) 总结 整个数据结构和排序算法部分是根据尚学堂在B站的视频,以及大话数据结构,以及菜鸟教程进行学习的 有总结好的东西我就直接截图了,有兴趣的可以戳链接去看视频学习 Java-算法与数据结构(尚学堂) 关于版权,文章中我想起来的话会标明出处,如果有没标明出处的可以评论,我会更改的。 ...原创 2020-06-26 12:06:16 · 235 阅读 · 0 评论 -
归并排序
基本思想 使用了分支的思想,用到了递归,有点像二分法的感觉,中间分开,左半边递归分开,右半边递归分开,直到分到最小,然后再排序组合 直接看图说话吧,还是尚学堂的图,有一说一他们课件真挺好的 疑惑 我并不觉得这种排序算法会好到哪里,他尽管把左右部分排好序了,但最后还是要再排一遍啊,比如这里 其实我不太明白这里 所以一会复习关键关注合治 而他的时间复杂度确实是O(nlogn)比插入,冒泡,希尔都要好 代码实现 public class MergeSort { public static void m原创 2020-06-24 17:07:33 · 141 阅读 · 0 评论 -
快速排序
基本思想 快速排序是对冒泡排序的一种改进,基本思想是: 通过一趟排序将要排序的数组分割成独立的两部分,其中一部分的所有数据都比另外一部分的数据小,再按此方法对 这俩个部分分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 有这样一个方法,给他传入一个数组,最左边下标,最右边下标 尚硅谷的实例图 个人理解 function(int[] a,int left,int right) 在方法里找出中间位置下标 使得这个中间位置左侧的值小于中间位置的值,右侧的值大于中间位置的值 把左侧的这原创 2020-06-24 11:10:42 · 164 阅读 · 0 评论 -
希尔排序
插入排序的问题 下图来自尚学堂课程视频截图 基本思想 希尔排序也是一种插入排序,是插入排序的缩小增量版本 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少, 每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止 上学堂的这个图片示例很有助于理解,放这里 代码实现 public static void shellSort2(int[] arr){ //增量gap,并逐步缩小增量 for (int gap = ar原创 2020-06-24 10:47:55 · 2548 阅读 · 3 评论 -
插入排序
这种排序尚硅谷的课程讲的很好,文字叙述和图片来自尚硅谷的笔记 视频地址 基本思想 把n个待排序的元素看成为一个有序表和一个无序表,开始时无序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把他的排序码依次与有序表元素的排序码进行比较,把它插入到有序表中的适当位置,使之成为新的有序表 代码实现 时间复杂度O(n²) public static void insertSort(int[] arr) { int insertVal = 0;原创 2020-06-24 10:14:04 · 144 阅读 · 0 评论 -
选择排序
基本思想 在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换; 第二次遍历n-2个数,找到最小的数值与第二个元素交换; 。。。 第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。 (菜鸟教程) 代码 时间复杂度O(n²) public static void selectSort(int[] arr) { for (int i = 0;i<arr.length-1;i++){ int minIndex = i;原创 2020-06-24 09:51:03 · 126 阅读 · 0 评论 -
冒泡排序
基本思想: 从前往后循环比较,每次比较两个值,较大的值往后移,一轮比较后获得一个最大值,刚好交换到了最后;然后再进行下一轮比较,此时比较的个数为n-1,因为已经确定了最后一个值是最大值,可以减少比较次数。 代码实现: 时间复杂度O(n²) 基础版 public static void sort(int[] arr) { int temp; for (int i = 0; i<arr.length-1; i++) { for (int j =原创 2020-06-24 09:42:47 · 148 阅读 · 0 评论