计算机基础知识 - 算法和数据结构

Sep 23, 2016   #reviews  #sort 

排序算法

稳定排序:(N是数组长度,K是不同键值的数量)

名称 时间复杂度 空间复杂度 说明
bubble \(O(N^2)\) \(O(1)\) 比较相邻的两个元素,每次将当前排列中最大的元素冒泡到最后
Cocktail \(O(N^2)\) \(O(1)\) 双向的冒泡排序
insertion \(O(N^2)\) \(O(1)\) 在一个有序数组中,插入一个给定的数到指定位置
bucket \(O(N)\) 需要\(O(K)\)的额外空间 将数组分到有限数量的桶中,每个桶在分别排序,非比较排序,适合海量的均匀分布数据排序
merge \(O(NlogN)\) 需要\(O(N)\)的额外空间 将两个(或两个以上)有序表合并成一个新的有序表
binary tree 期望时间\(O(NlogN)\),最坏\(O(N^2)\) \(O(N)\) 二叉搜索树,左子树的所有结点值小于根结点 ,右子树所有结点值大于根结点,左右子树分别为二叉搜索树

不稳定排序:

名称 时间复杂度 空间复杂度 说明
selection \(O(N^2)\) \(O(1)\) 每次从待排序数据中选出最大/小的元素,放在序列的起始位置
shell \(O(NlogN)\) \(O(1)\) 插入排序的一种,也称缩小增量排序
heapsort \(O(NlogN)\) \(O(1)\) 利用堆积树,是选择排序的一种
quicksort 期望时间\(O(NlogN)\),最坏\(O(N^2)\) \(O(1)\) 适合于大的,乱数列表;将数据分成两部分,一部分的所有数据比另一部所有数据都要小,递归排列,直到整组数据有序

算法题

1 大整数加、减、乘、除、求模运算实现 2 很多整数,找其中出现次数最多的那个数 3 单链表翻转(两个指针如何实现)、查找、删除、插入以及双向链表、有序链表合并 4 判断一个整数是否是2的整数次幂.(n&(n-1)) 5 二分查找(注意边界条件) 6 常见排序算法的实现以及稳定性(快排跟归并考的很多) 7 字符串翻转(O(n))、匹配(KMP算法) 8 最长递增子序列(nlogn的算法) 9 链表判断是否有环,环的入口,两个链表是否相交(快慢指针)。 10 指定一个数组,求2个数的和等于指定的和(某一个数),如果是3,4,5,n个等于个的和(某一个数)呢?(可以看作背包问题) 11 跳台阶问题

参考链接

排序算法11