各种查找排序算法比较

算法 平均时间 最差时间 最好时间 稳定度 空间 备注 思想
插入 O(n2) O(n2) O(n) 稳定 O(1) 大部分已排序时较好  
希尔 O(nlogn) O(ns)[s属于(1,2)] O(n) 不稳定 O(1) s是所选分组  
冒泡 O(n2) O(n2) O(n) 稳定 O(1) n小时较好  
快速 O(nlogn) O(n2) O(nlogn) 不稳定 O(nlogn) n大时较好 分治法
交换 O(n2) O(n2) O(n) 不稳定 O(1) n小时较好  
选择 O(n2) O(n2) O(n2) 不稳定 O(1) n小时较好  
O(nlogn) O(nlogn) O(nlogn) 不稳定 O(1) n大时较好  
归并 O(nlogn) O(nlogn)) O(nlogn)) 稳定 O(n) n大时较好 分治法
基数 O(d(r+n)) O(d(r+n)) O(d(r+nd)) 稳定 O(n) B是真数(0-9),R是基数(个十百)  
傅里叶变换             分治法
最长公共子序列             动态规划
克鲁斯卡尔 O(eloge)         最小生成树,e为边数目 贪心法
普里姆 O(n2)         最小生成树 贪心法
迪杰斯特拉 O(n2)         点的最短路径 动态规划
佛洛依德 O(n3)         点对的最短路径 动态规划
拓扑排序 O(n+e)            
关键路径 O(n+e)            
辗转相除法 O(logn)         最大公约数,gcd(a,b)= gcd(b,a mod b)  

转自Cblog->java成长之路

时间: 2024-08-27 11:08:25

各种查找排序算法比较的相关文章

常用查找排序算法

1.折半查找算法: 对于一个已排好序的数组,若要查找某元素是否属于数组中,则可以用这种算法. 返回找到的元素在数组中的下标,找不到则返回-1 #include <stdio.h> #define LEN 8 int a[LEN] = { 1, 3, 3, 3, 4, 5, 6, 7 }; int binarysearch(int number) { int mid, start = 0, end = LEN - 1; while (start <= end) { mid = (start

查找和排序的基本操作:查找排序算法大集合

重点 查找算法着重掌握:顺序查找.二分查找.哈希表查找.二叉排序树查找. 排序算法着重掌握:冒泡排序.插入排序.归并排序.快速排序. 顺序查找 算法说明 顺序查找适合于存储结构为顺序存储或链接存储的线性表. 算法思想 顺序查找也称为线形查找,属于无序查找算法.从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功:若扫描结束仍没有找到关键字等于k的结点,表示查找失败. 算法实现 int sequenceSearch(int a[], int valu

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

Java笔记(07):常见对象--StringBuffer、二分查找及排序算法

1.StringBuffer类的构造方法 1 package cn.itcast_01; 2 3 /* 4 * 线程安全(多线程讲解) 5 * 安全 -- 同步 -- 数据是安全的 6 * 不安全 -- 不同步 -- 效率高一些 7 * 安全和效率问题是永远困扰我们的问题. 8 * 安全:医院的网站,银行网站 9 * 效率:新闻网站,论坛之类的 10 * 11 * StringBuffer: 12 * 线程安全的可变字符串. 13 * 14 * StringBuffer和String的区别? 1

排序算法(冒泡,选择,插入,快速)查找算法(二分,快速)

四种排序算法 1.冒泡排序 思路分析:从前往后相邻的两个数一次进行比较,大的往下沉,小的网上 冒.当相邻的两个数的比较后发现他们的排序与排序要求相反,就互换. 代码实现 $arr = array (1,42,33,69,7,82,34,54,70,99); $len = count($arr); For($i=1;$i<$len;$i++){ For($j=0;$j<$len-$i;$j++){ If($arr[$j] > $arr[$j+1]){ $tmp = $arr[$j+1];

PHP的排序算法跟查找算法

排序算法: (1)冒泡排序 1 $arr = array(15,8,20,50,37,85,10,5,11,4); 2 //冒泡排序 3 function maoPao($arr){ 4 for($i = 0; $i < count($arr)-1; $i++){ 5 for($j = 0; $j < count($arr)-1; $j++){ 6 if($arr[$j] > $arr[$j+1]){ 7 $temp = $arr[$j]; 8 $arr[$j] = $arr[$j+1]

程序员必须要掌握的排序算法以及查找方法

程序员必须要掌握的排序算法以及查找方法 经典的排序算法要一个一个的弄懂.借个图,列出学习提纲. 三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表 2016-04-17 09:08:04

排序与查找简单算法 java代码实现

最近整理了下以前的资料.有的算法没有实现,嘿嘿,以后再补吧! /** * 排序算法的分类如下:      * 1.插入排序(直接插入排序.折半插入排序.希尔排序):      * 2.交换排序(冒泡泡排序.快速排序):      * 3.选择排序(直接选择排序.堆排序):      * 4.归并排序:      *  关于排序方法的选择:      * (1)若n较小(如n≤50),可采用直接插入或直接选择排序.      *  当记录规模较小时,直接插入排序较好:否则因为直接选择移动的记录数少

iOS 排序算法总结、二分法查找

还有一个:二分插入排序  平均时间O(n2)   稳定 1.插入排序 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环,直到全部排好顺序. 直接插入排序是稳定的.算法时间复杂度O(n2)--[n的平方] main() { int  a[10],j,i,m; for(j=1;j<10;j++) { m=a[j]; for(i=j-1;i>=0;i--) { if(a[i]<m) b