归并排序介绍 一种分而治之思想 归并排序步骤 从下往上的归并排序(自下而上的迭代) 从上往下的归并排序(自上而下的递归):它与"从下往上"在排序上是反方向的。它基本包括3步: ① 分解 -- 将当前区间一分为二,即求分裂点 mid = (low + high)/2; ② 求解 -- 递归地对两个子区 ...
分类:
编程语言 时间:
2021-04-10 13:21:25
阅读次数:
0
基数排序介绍 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 基数排序 vs 计数排序 vs 桶排序 基数排序有两种方法: 这三种排序算法都利用了桶的概 ...
分类:
编程语言 时间:
2021-04-10 13:20:52
阅读次数:
0
楔子 无论你使用哪种语言,从事哪个方向,在面试中算法基本上都是逃不掉的。也许你听说过技术过时或者语言过时,但你绝对没有听过算法过时。这一次我们来了解一下常见的排序算法,以及它们的时间复杂度,并使用代码实现它们。 冒泡排序 冒泡排序(Bubble Sort)是一种非常简单直观的排序算法,就是从左到右依 ...
分类:
编程语言 时间:
2021-04-08 12:59:42
阅读次数:
0
快速排序介绍:** 快速排序是对冒泡排序的一种改进,属于交换排序。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。 快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治 ...
分类:
编程语言 时间:
2021-04-06 15:00:53
阅读次数:
0
/* c++ 中 std::sort()使用了快速排序的算法,下面看下它的实现算法 快速排序的基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的数字均比另一部分数字小,则可分别对这两部分进行排序,以达到整个序列有序。 算法描述:https://www.bilibili.com/vi ...
分类:
编程语言 时间:
2021-03-31 11:41:36
阅读次数:
0
""" 快速排序 分治法(divide and conquer),三步走 1. Partition:选择一个基准(pivot)分割列表为两个子列表,小于基准和大于基准, 基准数通常选择第一个或最后一个元素 2. 对两个子列表分别快排,调用自身 3. 合并结果,两个子列表和只包含基准数的列表 """ ...
分类:
编程语言 时间:
2021-03-29 12:03:54
阅读次数:
0
一、选择排序 选择排序是一种非常简单而且很直观的排序算法,此排序算法的时间复杂度为O(n²),因此,从时间复杂度来看,需要排序的数据规模越小,效果就越好;它的好处就是在进行排序的过程中不会占用额外的内存空间。 选择排序的基本思想:每一次在n-i+1(i=1,2,3,...,n-1)个记录中选取最小的 ...
分类:
编程语言 时间:
2021-03-18 14:26:58
阅读次数:
0
冒泡排序 1.动图演示 2.代码实现 private static void bubbleSort(int[] arr) { if (arr.length <= 1) return; for (int i = 0; i < arr.length; i++) { // 用于标识数组是否有序 boole ...
分类:
编程语言 时间:
2021-03-16 13:24:13
阅读次数:
0
1.5 堆排序 ? 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 核心思路: 1、depth := length/2 - 1 //节点深度,n,2n+1,2n+2 2、 ...
分类:
编程语言 时间:
2021-03-05 13:28:37
阅读次数:
0
奇偶排序 核心思想:奇数位和偶数位的数据交替比较,最终实现排序 代码实现: package main import "fmt" func IsSort(arr []int) []int { flag := false if len(arr) ? 1 for flag == false { flag ...
分类:
编程语言 时间:
2021-03-05 13:26:07
阅读次数:
0