排序
kangin0914
一只菜鸟,分享一下我的学习笔记
一口吃不成一个胖子,得一点一点来
打怪升级,变得优秀起来
展开
-
排序学习笔记,方便自己查看,用java实现
对排序一直模模糊糊,相对排序做一个个人的笔记,同时能让自己印象深刻,跟着CS-Notes学习,一个很好的开源库,地址https://cyc2018.github.io/CS-Notes除此之外,我也想分别记一下他们的复杂度,去用java实现一下 选择排序 冒泡排序 插入排序 希尔排序 归并排序 快速排序 堆排序我会在2020年5月5号零点之前做好这些笔记...原创 2020-05-03 14:03:10 · 145 阅读 · 0 评论 -
1、选择排序(详细)
目录约定待排序的元素需要实现 Java 的 Comparable 接口,该接口有 compareTo() 方法,可以用它来判断两个元素的大小关系。使用辅助函数 less() 和 swap() 来进行比较和交换的操作,使得代码的可读性和可移植性更好。排序算法的成本模型是比较和交换的次数。(这是我copy下来的,来源:点这里)public abstract class Sort<T ...原创 2020-05-03 14:48:23 · 219 阅读 · 0 评论 -
2、冒泡排序(详细)
目录Sort类在选择排序中的约定中正文从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以让未排序的最大元素上浮到右侧。在一轮循环中,如果没有发生交换,那么说明数组已经是有序的,此时可以直接退出。代码实现:public class Bubble<T extends Comparable<T>> extends Sort<T>{ @Overrid...原创 2020-05-03 15:26:07 · 187 阅读 · 0 评论 -
3、插入排序(详细)
目录Sort类在选择排序中的约定中正文每次都将当前元素插入到左侧已经排序的数组中,使得插入之后左侧数组依然有序。插入排序的时间复杂度取决于数组的初始顺序,如果数组已经部分有序了,那么逆序较少,需要的交换次数也就较少,时间复杂度较低。public class Insertion<T extends Comparable<T>> extends Sort<T&g...原创 2020-05-03 15:59:22 · 255 阅读 · 0 评论 -
4、希尔排序(详细)
目录Sort类在选择排序中的约定中正文希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。插入排序的一种,本栏所写的插入排序实际上是直接插排序对于大规模的数组,插入排序很慢,因为它只能交换相邻...原创 2020-05-03 16:57:06 · 182 阅读 · 0 评论 -
5、归并排序(详细)
目录Sort类在选择排序中的约定中正文归并排序的思想是将数组分成两部分,分别进行排序,然后归并起来。归并方法归并方法将数组中两个已经排序的部分归并成一个。...原创 2020-05-03 23:10:33 · 168 阅读 · 0 评论 -
6、快速排序(详细)
目录Sort类在选择排序中的约定中正文1.基本算法归并排序将数组分为两个子数组分别排序,并将有序的子数组归并使得整个数组排序;快速排序通过一个切分元素将数组分为两个子数组,左子数组小于等于切分元素,右子数组大于等于切分元素,将这两个子数组排序也就将整个数组排序了。...原创 2020-05-04 13:28:33 · 407 阅读 · 0 评论 -
7、堆排序(详细)
目录正文1.堆(heap)这里所指的是数据结构中的堆,堆中某个节点的值总是大于等于(或小于等于)其子节点的值,并且堆是一颗完全二叉树。堆可以用数组来表示,这是因为堆是完全二叉树,而完全二叉树很容易就存储在数组中。位置 k 的节点的父节点位置为 k/2,而它的两个子节点的位置分别为 2k 和 2k+1。这里不使用数组索引为 0 的位置,是为了更清晰地描述节点的位置关系。public cla...原创 2020-05-04 14:16:54 · 383 阅读 · 0 评论