基数排序(桶排序): 设置若干个箱子,将关键字为k的记录放入第k个箱子中,然后按序号将非空的连接。而数字是有范围的,若待排元素均由0-9这十个数字组成,则只需设置十个箱子,相继按个、十、百...进行排序 平均,最坏时间复杂度 O(k*(n+m)) k是关键字的个数,如个位、十位分别就是关键字;n是元 ...
分类:
编程语言 时间:
2020-04-19 14:52:31
阅读次数:
55
冒泡排序(升序为例) 思路: 1. 从头开始比较每一对相临的元素,其后者比前者大则交换,直到一轮比较结束 2. 排除1中找到最大的元素,重复1的步骤 Swift class SelectionSort { var array = [5, 7, 2, 8, 9, 4, 7, 3, 2] func so ...
分类:
编程语言 时间:
2020-04-19 14:29:32
阅读次数:
60
快速排序(Quicksort)是对冒泡排序的一种改进,由C. A. R.Hoare在1960年提出。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个 ...
分类:
编程语言 时间:
2020-04-19 13:05:04
阅读次数:
72
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 1 def insert_sor ...
分类:
编程语言 时间:
2020-04-18 18:58:39
阅读次数:
66
归并排序 归并排序是一种分治策略的排序算法。它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列。 归并排序首先由著名的现代计算机之父 在`1945 EDVAC`(一台美国早期电子计算机),足足用墨水写了 23 页的排序程序。注:冯·诺依曼(John ...
分类:
编程语言 时间:
2020-04-18 14:12:29
阅读次数:
67
某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学。在这里,我们区分开左倾红黑树和普通红黑树。 红黑树是一种近似平衡的二叉查找树,从 树或 树衍生而来。通过对二叉树节点进行染色,染色为红或黑节点,来模仿 ...
分类:
编程语言 时间:
2020-04-18 13:43:54
阅读次数:
69
public void countingsort(int[] array, int[] b, int k) { //创建数组c int[] c = new int[k+1]; for(int i=0;i<c.length;i++) { c[i] = 0; } //统计数组array中每个元素出现的次 ...
分类:
编程语言 时间:
2020-04-18 13:38:32
阅读次数:
56
冒泡排序 冒泡排序是大多数人学的第一种排序算法,在面试中,也是问的最多的一种,有时候还要求手写排序代码,因为比较简单。 冒泡排序属于交换类的排序算法。 一、算法介绍 现在有一堆乱序的数,比如: 。 第一轮迭代:从第一个数开始,依次比较相邻的两个数,如果前面一个数比后面一个数大,那么交换位置,直到处理 ...
分类:
编程语言 时间:
2020-04-18 13:35:43
阅读次数:
55
快排确实厉害!!! 总的思想是分治递归,取定一个值作为标签,比该值小的去左边,比该值大的去右边。 单向扫描分区法: 去左边的操作:只将sp++即可。 去右边的操作:具体是将sp指向的值与bigger指向的值交换。 考虑边界:当扫描指针sp与bigger相等时,再执行一次循环后,sp刚好在bigger ...
分类:
编程语言 时间:
2020-04-17 21:55:43
阅读次数:
88
希尔排序(升序为例) 希尔排序的思想:将序列看成一个矩阵,根据一个步长序列将原序列分成m个列,逐列进行排序,直到列数变为1列为止 因此希尔排序的时间复杂度与步长关系密切。 希尔本人给出的步长序列为: n / (2^k),其中n为序列元素的个数,k = 1,取整数 举例: 序列元素有32个,那步长序列 ...
分类:
编程语言 时间:
2020-04-17 21:53:17
阅读次数:
78