关于java:排序算法学习报告

4次阅读

共计 1502 个字符,预计需要花费 4 分钟才能阅读完成。

对于学习自身,存在很多误区,特此写这篇学习报告来温习常识、调整认知。
意识根底须要接收一些对于学习上的意识事实。
  • 学习是一个间断的过程:了解 - 表白 - 使用,前面的都会测验后面的步骤。
  • 学习过程贯通着记忆、忘记、谬误、情绪杂念,这些必然存在,接收这些存在;
  • 学习过程的每一步都须要测验。
  • “ 了解 - 表白 - 使用 ”, 会忘记须要温习

学习工夫 :2021-2-21 至 2021-2-24
学习形式 :10 小时视频学习
学习过程 :了解概念和关系后,通过默敲来表白,解 leetcode 题来利用
学习进度 :了解和表白,未利用
编程语言 :java
学习留神点 :排序的最优解、工夫复杂度、排序稳定性(两个雷同的元素,排序实现状态和未排序状态的绝对地位不扭转)、原地排序(1-7)、辅助排序(8-10)
学习内容:10 种排序算法

1、冒泡排序

内容:针对未排序数组中的每一元素进行相邻地两两比拟,依据大小进行地位替换;优化:缩小比拟次数
a、每一元素循环如果不呈现替换则已排序实现,break
b、每一元素循环时,已排序的元素不须要再次比拟,记录已排序的地位。

2、抉择排序

内容:依照数组大小进行循环,每次找到最大值的下标,将其与本次循环的最初一个元素替换。优化:堆排序

3、堆排序

内容:对未排序的数组进行自建堆 heapify,而后每次将堆顶和开端替换,长度自减 1 后下滤直至堆长度等于 1。

4、插入排序

内容:将未排序数组中的每一元素,和后面已排序实现的元素进行比拟替换。优化:缩小比拟次数,a、和前排比拟找到插入地位,而后元素移动插入
b、二分查找找到插入地位,而后元素移动插入

5、归并排序

内容:对未排序的数组屡次二分直至只剩下一个元素,再将分好的元素从新合并,合并过程是各取两局部数组中的一个比拟后插入。

6、疾速排序

内容:选首元素作为轴元素和首末的指针,从右往左遍历元素,和轴元素比拟找到比轴元素小的元素,将其笼罩首指针,首指针 +1,再从左往右遍历,找到比轴元素大的覆末指针,末指针 -1。到首末指针相等,轴元素笼罩两头。以轴元素划分为两局部数组反复以上过程。优化:始终选取轴元素可能造成比拟次数减少,可随机选取一个元素和首元素替换

7、希尔排序

内容:给定一个序列如{16,8,4,2,1}(n/2^k),按序列数为规范划分数组成几行,按竖列进行排序,直至序列循环结束即可。

8、计数排序

内容:找到最大值,按最大值新建一个统计数组,遍历待排数组统计元素呈现的次数,最初按统计数组遍历出有序序列
毛病:节约空间,无奈排序正数,排序不稳固。优化:找出最大值同时找出最小值,新建最大最小值范畴的数组,可解决空间节约和正数排序问题,统计元素频率,将频率加上前一元素的频率,反向遍历原数组,生成有序序列。

9、基数排序

内容:找出最大值,按位数从个位开始进行计数排序,直至最高位。优化:新建二维数组作为桶,按位数从个位开始将元素别离放入桶中,再遍历所有桶赋值原数组,直至最高数。

10、桶排序

内容:按数组大小新建多个动静数组或链表(桶),将元素按肯定规定平均存入桶中,独自对桶进行排序,最初将不空的桶组合成有序序列。

学习效果剖析:

  • 明天从新回忆三天前的内容,发现 1,2,3,4 曾经忘记局部内容,有些曾经想不起来了,这是忘记很失常。
  • 学习以上常识是通过了解 - 表白的过程,产生一个疑难
  • 从了解上来讲,还是会忘记要害的原理,阐明了解水平明明不够,总自认为了解了,了解更新一个规范。
  • 从表白上讲,默敲过程其实还是有参考视频教程的代码,所以表白的水平不够,表白也须要更新一个规范,除了默敲还能够写学习报告或说给人听。
  • 忘记其实是再次记忆的时刻,回忆越艰巨记得越可靠。—《认知本能》
  • 最初,我想我应该去找使用了。。待续
正文完
 0