数据结构和算法
林罔顾
这个作者很懒,什么都没留下…
展开
-
排序算法-快速排序(java实现)
快速排序是对冒泡排序的一种改进。基本思想是先从数据元素中取出一个数作为基准。以从小到大为例,将比这个数大的全都放到这个数的右边,比它小的都放到这个数的左边。然后再按此方法对这两部分数组分别进行上述操作。快速排序:时间复杂度是O(nlogn)最好情况O(nlogn)最坏情况O(n2)空间复杂度 O(nlogn)快速排序不占用额外内存,是不稳定的。图解public static void quickSort(int[] arr,int left, int right) { in原创 2020-06-27 09:22:05 · 287 阅读 · 0 评论 -
排序算法-希尔排序(移位式)
希尔排序是直接插入排序算法的一种更高效的改进版本,又称"缩小增量排序"。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,算法结束。希尔排序:时间复杂度是O(nlogn)最好情况O(nlog2n)最坏情况O(nlog2n)空间复杂度 O(1)排序方式不占用额外内存,希尔排序是不稳定的。图解核心代码public static void shellSort(int arr[]){ //增量gap,原创 2020-06-27 08:22:32 · 2109 阅读 · 0 评论 -
排序算法-插入排序(java实现)
插入排序的基本思想是把n个待排序的数据元素看成为一个有序表和一个无序表,开始时有序表只包含一个元素,无序表中含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表插入排序:时间复杂度是O(n2)最好情况O(n)最坏情况O(n2)空间复杂度 O(1)排序不占用额外内存,是一个稳定的算法。图解插入排序 红色表示有序表,黑色表示无序表核心代码 public static void insertSo原创 2020-06-26 21:20:11 · 281 阅读 · 0 评论 -
排序算法-选择排序(java实现)
选择排序的核心思想是从数据元素中选出最值与第一个元素/最后一个进行交换,注意是找到最值后才交换,不是边找边交换,以数组为例第一次 arr[0] ~a[n-1] 找出最值与a[0]交换第二次arr[1]~a[n-1] 找出最值与a[1]交换第三次arr[2]~a[n-1] 找出最值与a[2]交换…以此类推选择排序:时间复杂度是O(n2)最好情况O(n2)最坏情况O(n2)空间复杂度 O(1)选择排序不占用额外内存,是不稳定算法。图解选择排序,红色表示已经确定的数据元素根据上图我们原创 2020-06-26 18:38:46 · 487 阅读 · 1 评论 -
排序算法-冒泡排序(优化)
排序算法在编程中起到非常大的作用,冒泡排序是其中比较经典的算法。虽然效率不高,但是每个算法都有适合的场景。冒泡排序就是在排序过程中相邻元素不断交换,看起来向元素冒泡一样。那我们就可以通过添加一个标志位来对冒泡排序进行优化处理。因为,在某一次排序的过程中可能需要排序的数组已经是有序的了,在这个时候我们就可以通过标志位判断直接跳出循环。冒泡排序:时间复杂度是O(n2)最好情况O(n)空间复杂度 O(1)排序方式不占用额外内存,冒泡算法是稳定的。在这有些刚刚接触排序算法的朋友可能不知道稳定的意思,我就简原创 2020-06-26 17:31:08 · 618 阅读 · 0 评论