三大查找八大排序
2015-08-21 22:58
239 查看
排序
一、选择排序
原理:在N-i+1个记录中找到最小的那个值的位置,然后与i位置的值进行交换。
时间复杂度分析:由于到第I个数前都是有序的,所以比较的次数是:n-1+n-2+。。。+1=n*(n-1)/2,交换的次数最多是n-1次,因此时间复杂度为比较次数和交换次数的总和0(n2);
二、冒泡排序
原理:从数组最后一个值开始,比较N-i次,每次是两两比较相邻的值,若序号大的值比序号小的值小,则交换。
时间复杂度分析:每次都要比较N-i次,当整个数组是逆序时,每次都要交换,则时间复杂度为2*n*(n-1)/2=O(n2)
三、直接插入排序
原理:在一个数组中,默认第一个数值是有序的,以后的数都是在有序数组中正确的位置插入,当找到这个正确的位置时,这个位置后的数都要后移一个位置。
时间复杂度分析:最好的时候是整个数组是有序的,此时只要循环一次数组就可以了,O(n),最坏的情况是反序,每次都要将有序数组后移,(i+1)求和,O(n2)
四、希尔排序
原理:将数组分成几个小序列进行直接插入排序,设一个增量,直至增量等于1的时候,停止算法。
时间复杂度:最好o(n3/2),最坏,O(n2)
五、快速排序
原理:
查找
一、无序查找
原理:在头结点设置哨兵,当查找完一轮数组后,若找不到则返回0下表
时间复杂度分析:减少了比较的次数,不用判断下标是否越界了。
二、有序查找
1、折半查找
原理:每次都从一段数组中间比较。
时间复杂度分析:最好的时候是一次,最坏的时候是二叉树的深度[log(2)n}+1,
一、选择排序
原理:在N-i+1个记录中找到最小的那个值的位置,然后与i位置的值进行交换。
时间复杂度分析:由于到第I个数前都是有序的,所以比较的次数是:n-1+n-2+。。。+1=n*(n-1)/2,交换的次数最多是n-1次,因此时间复杂度为比较次数和交换次数的总和0(n2);
二、冒泡排序
原理:从数组最后一个值开始,比较N-i次,每次是两两比较相邻的值,若序号大的值比序号小的值小,则交换。
时间复杂度分析:每次都要比较N-i次,当整个数组是逆序时,每次都要交换,则时间复杂度为2*n*(n-1)/2=O(n2)
三、直接插入排序
原理:在一个数组中,默认第一个数值是有序的,以后的数都是在有序数组中正确的位置插入,当找到这个正确的位置时,这个位置后的数都要后移一个位置。
时间复杂度分析:最好的时候是整个数组是有序的,此时只要循环一次数组就可以了,O(n),最坏的情况是反序,每次都要将有序数组后移,(i+1)求和,O(n2)
四、希尔排序
原理:将数组分成几个小序列进行直接插入排序,设一个增量,直至增量等于1的时候,停止算法。
时间复杂度:最好o(n3/2),最坏,O(n2)
五、快速排序
原理:
查找
一、无序查找
原理:在头结点设置哨兵,当查找完一轮数组后,若找不到则返回0下表
时间复杂度分析:减少了比较的次数,不用判断下标是否越界了。
二、有序查找
1、折半查找
原理:每次都从一段数组中间比较。
时间复杂度分析:最好的时候是一次,最坏的时候是二叉树的深度[log(2)n}+1,
相关文章推荐
- Windows 2012R2下部署Windows all+Office all KMS服务器
- oracle net configuration assistant 相关概念汇总
- uva 1396 - Most Distant Point from the Sea(平面相交)
- 终极 Shell——ZSH
- 1.传感器学习笔记之初次相识
- spfa
- HDU 5238 Problem Killer
- Skip list -- 跳跃表的插入删除搜索等ADT操作的实现与测试
- Listview滑动时不加载数据,停下来时加载数据,让App更优
- java socket tcp(服务器循环检测)
- acmlive7040容斥原理
- Fragment讲解
- 大数据处理技术
- 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)
- 在JMeter测试计划中如何控制业务比例
- 【LeetCode】(67)Add Binary (Easy)
- Python Elasticsearch api
- iOS开发之网络篇-各种网络状态码
- NBUT 1456 Orianna (DP)
- uva 1453 - Squares(旋转卡壳)