摘要:
算法总结 详细十大排序算法:https://www.cnblogs.com/WindSun/category/1375215.html 图片名词解释: n: 数据规模 k: “桶”的个数 In-place: 占用常数内存,不占用额外内存 Out-place: 占用额外内存 算法的分类 比较和非比较的 阅读全文
摘要:
前言 桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分 阅读全文
摘要:
基本思想 计数排序是一种线性排序算法,它利用了一个数组,因为数组下标的增长是线性的,所以它就把自己的元素转换成新开辟数组的下标。可是下标都是非负数啊?数组当中的值有正有负啊。做一个简单的转化就行了:找到数组中最小元素,用元素值减去,这样一来,所有元素对应的下标就求出来了。(实际上感觉像是个映射函数? 阅读全文
摘要:
基本思想 基数排序是借助“分配”和“收集”两种操作对单逻辑关键字进行排序的一种内部排序方法。 数组下标从0-9,每个数组元素是一个链表 比如对一些三位数以内的树排序,先将个位的数值插入对应的下标的链表中,然后再放回原数组,放回的顺序和插入的顺序一致,将链表清空,再将十位的数字插入对应的下标的链表中, 阅读全文
摘要:
基本思路 归并排序的基本思想是:首先将a[0..n-1]看成是n个长度为1的有序表,将相邻的k(k≥2)个有序子表成对归并,得到n/k个长度为k的有序子表;然后再将这些有序子表继续归并,得到n/k2个长度为k2的有序子表,如此反复进行下去,最后得到一个长度为n的有序表。 若k=2,即归并在相邻的两个 阅读全文
摘要:
基本思路 先默认未排序区首个元素为最小,然后从后面的元素中挑出最小的元素,与这个元素交换,直至循环完成。 算法代码 算法分析 从i个记录中挑选最小记录需要比较i-1次。 第i(i=0~n-2)趟从n-i记录中挑选最小记录需要比较n-i-1。 对 n 个记录进行简单选择排序,所需进行的关键字的比较次数 阅读全文
摘要:
基本思想 每趟使表的第1个元素放入适当位置(归位),并且左边的元素小于这个元素,右面的元素大于这个元素,将表一分为二,对子表按递归方式继续这种划分,直至划分的子表长为0或1(递归出口)。 快速排序递归树 算法代码 算法分析 最好情况: 此时时间复杂度为O(nlog2n),空间复杂度为O(log2n) 阅读全文
摘要:
基本思路 希尔排序也是一种插入排序,又称缩小增量排序,在效率上教其他插入排序有较大的改进。 ① d=n/2 ②将排序序列分为d个组,在各组内进行直接插入排序 ③递减d=d/2,重复② ,直到d=1 算法最后一趟对所有数据进行了直接插入排序,所以结果一定是正确的。 它的基本思想是:先将整个待排记录序列 阅读全文
摘要:
直接插入排序 基本思路 一趟直接插入排序:在有序区中插入R[i]的过程。 算法代码 算法分析 折半插入排序 基本思路 直接插入排序,当有序区元素太多时,在有序区中寻找插入位置可能比较的次数太多,采用折半插入法,即折半查找到要插入的位置,加快了查找效率,但是要移动的元素仍然和直接插入排序的相同,仅仅提 阅读全文