排序与搜索算法

来源:互联网 发布:java ant 安装 编辑:程序博客网 时间:2024/05/22 00:24
 排序算法

插入排序:基本思想是将下一输入插入到已排好的序列中。是一种在线算法,其算法复杂度为O(n2)

希尔排序:一种改进的插入排序算法,将序列按间隔距离d分组,对每组实施插入排序,逐渐减小间隔距离d来分组实施插入排序,最终d=1时,排序完成。是一种离线算法,算法复杂度为O(n2),但是相对于基本插入算法来说,会减少大量数据移动。

冒泡排序:基本思想将序列从头到尾相邻逆序的两个数进行交换,在经历一轮交换后,最大元素会排在序列末,所以经过n轮冒泡后,排序完成。离线算法,其算法复杂度为O(n2)

选择排序:是一种改进的冒泡排序算法,执行效率应该比冒泡排序优,基本思想选择最大的元素与序列末端元素交换,在经历一轮交换后,最大元素会排在序列末,所以经过n轮选择后,排序完成。离线算法,其算法复杂度为O(n2)

归并排序:分治思想,将序列分为前后两个部分,分别进行排序后再合并在一起。其算法复杂度为O(nlgn),在并行计算机中,该算法更有优势。

快速排序:随机在序列中选择一个数作为标数,数列根据标数通过交换分成了前后两部分和标数,其中前面部分都比标数小,后面部分都比标数大,中间为标数,然后递归对前后两部分进行快速排序。离线算法,算法复杂度为O(nlgn)

堆排序:利用最小堆数据结构来进行排序,既可作为在线算法,又可以实现离线算法,堆的基本操作基本为O(lgn),所以排序算法复杂度为O(nlgn)

基数排序:通过根据键值对r进制各位的权值将键值分配到不同的桶中,实现排序。

拓扑排序

 

搜索算法

二分搜索:在有序序列中搜索指定值,比较指定值和序列中间值,若与中间值相等,则命中,若小于中间值,则用二分搜索递归搜前半部分序列,若大于中间值,则用二分搜索递归搜后半部分序列。其算法时间复杂度为O(lgn)。

哈希表:利用hash函数散列指定值,若散列值找得到匹配,则命中,否则不命中。哈希表理想时间复杂度为O(1)。但在hash函数球散列值时可能会存在冲突,如何选择好的hash函数减少冲突成为哈希表算法的关键。

二叉查找树:利用二分查找树数据结构来查找指定值,其算法时间复杂度与二叉树高度有关,为O(h),h为二叉树高度。

 

原创粉丝点击