常用的排序算法和时间复杂度

1. 数据结构部分

数据结构中常用的操作的效率表


通用数据结构


查找 


插入 


 删除


遍历 


数组


O(N)


O(1)


O(N)



有序数组


O(logN)


O(N)


O(N)


O(N)


链表


O(N)


O(1)


O(N)



有序链表


O(N)


O(N)


O(N)


O(N)


二叉树


O(logN)


O(logN)


O(logN)


O(N)


二叉树(最坏)


O(N)


O(N)


O(N)


O(N)


红黑树


O(logN)


O(logN)


O(logN)


O(N)


2-3-4树


O(logN)


O(logN)


O(logN)


O(N)


哈希表


O(1)


O(1)


O(1)



专用数据结构


 


 


 


 




O(1)


O(1)



队列



O(1)


O(1)



优先级队列



O(N)


O(1)



优先级队列(堆)



O(logN)


O(logN)


 

2. 排序算法

常见的排序算法比较表


排序


平均情况


最好情况


最坏情况


稳定与否


空间复杂度


冒泡排序


O(N2)


O(N)


O(N2)


稳定


1


选择排序


O(N2)


O(N2)


O(N2)


不稳定


1


插入排序


O(N2)


O(N)


O(N2)


稳定


1


希尔排序


O(NlogN)


(依赖于增量序列)


不稳定


1


快速排序


O(NlogN)


O(NlogN)


O(N2)


不稳定


O(logN)


归并排序


O(NlogN)


O(NlogN)


O(NlogN)


稳定


O(N)


二叉树排序


O(NlogN)


O(NlogN)


O(N2)


稳定


O(N)


堆排序


O(NlogN)


O(NlogN)


O(NlogN)


不稳定


1


拓扑排序


O(N+E)





O(N)

首先先给出我们常用的算法的时间复杂度,后面会具体讲解每一个算法,以及在不同的场合下哪种时间复杂度很高效

时间: 2025-01-21 08:43:38

常用的排序算法和时间复杂度的相关文章

常用内部排序算法之五:希尔排序

前言 在前面介绍常用内部排序算法的文章中,我们知道在简单排序算法中,直接插入排序算法的时间复杂度是要优于冒泡排序和简单选择排序的.而这里要讲的希尔排序则是优于直接插入排序的.而且希尔排序打破了原来简单排序中时间复杂度不能超过O(n2)的神话.这也是希尔排序伟大的地方,而且希尔排序不同于之前三种简单排序,希尔排序是以一个科学家的名字进行命名的. 希尔排序的原理 由于希尔排序是在直接插入排序的基础上进行改进的,所以为了更好理解希尔排序,需要再次将直接插入排序请出来.我们知道直接插入排序的基本思想是将

C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等_C 语言

本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是算法实现文件Sort.h,代码如下: /* * 实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 * 以及快速排序.归并排序.堆排序和LST基数排序 * @author gkh178 */ #include <iostream> template<class T> void swap_value(T &a, T &b) { T t

C#几种常用的排序算法

排序|算法 C#几种常用的排序算法:1 冒泡排序法 1冒泡排序法#region 冒泡排序法 2public void Sort(int[] list) 3{ 4    long begintime = System.DateTime.Now.Second*1000+System.DateTime.Now.Millisecond; 5    WriteLine(begintime); 6    int j,temp; 7    j= 1; 8    while((j<list.Length)) 9

总结5种比较高效常用的排序算法

原文:总结5种比较高效常用的排序算法 1 概述     本文对比较常用且比较高效的排序算法进行了总结和解析,并贴出了比较精简的实现代码,包括选择排序.插入排序.归并排序.希尔排序.快速排序等.算法性能比较如下图所示:   2 选择排序     选择排序的第一趟处理是从数据序列所有n个数据中选择一个最小的数据作为有序序列中的第1个元素并将它定位在第一号存储位置,第二趟处理从数据序列的n-1个数据中选择一个第二小的元素作为有序序列中的第2个元素并将它定位在第二号存储位置,依此类推,当第n-1趟处理从

php 常用的排序算法代码[冒泡,递归排序

php 常用的排序算法代码[冒泡,递归排序 冒泡排序算法  function bubblesort($arr) { $n=count($arr); for($i=0;$i<$n;$i++) { for($j=$i;$j<=$n-1;$j++) { if($arr[$i]>$arr[$j]) { $temp=$arr[$i]; $arr[$i]=$arr[$j]; $arr[$j]=$temp; } } } return $arr; }  //直接插入排序   function inser

常用内部排序算法之四:简单选择排序、直接插入排序和冒泡排序

前言 之所以把这三类算法放在一块,是因为除此之外的算法都是在这三类算法的基础上进行优化的.简单选择排序的思想是每一趟n−i+1(i=1,2,...,n−1)个记录中选择最小的记录作为有序序列的第i个记录.直接插入排序的思想是将一个记录插入到已经排好序的有序序列中,从而得到一个新的.记录数增加1的有序表.冒泡排序的算法思想是不断在交换,通过交换完成最终的排序,每一趟的交换就会把最大的记录取出来,下一趟则会把第二大的记录取出来,这样每进行一趟交换就把一个记录取出来的过程称为冒泡. 简单选择排序算法

常用内部排序算法之二:快速排序

前言 快速排序可以说是内部排序算法中的高手,之所以称为快速排序,是因为快速排序算法从整体性能上讲是排序冠军.快速排序算法的思想是:通过一趟快速排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的记录的关键字小,则可分别对这两部分记录继续进行排序,达到整个记录有序.实现快速排序算法的核心是partition函数,这个函数的主要目的先选取当中的一个关键字(称为枢轴),然后尽可能将他放在一个位置,使得它左边的值都比它小,右边的值比它大. 快速排序算法实现 package com.

视觉直观感受7种常用的排序算法

1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: ▲从数列中挑出一个元素,称为 "基准"(Pivot), ▲重新排序数列,所有

常用内部排序算法之三:堆排序

前言 堆排序是以堆为原型的排序.堆首先是一棵二叉树,具有以下两个性质:每个节点的值大于或者等于其左右孩子结点的值,称为大顶堆:或者每个节点的值都小于或者等于其左右孩子结点的值,称为小顶堆.从这个定义中可以发现,堆得根节点要么是最大值要么是最小值.实现堆排序的基本思想是:将待排序的序列构造成一个大顶堆或者小顶堆.此时整个堆满足根节点是最大值或者最小值.将根节点移走,并与堆数组的最后一个值进行交换,这样的话最后一个值就是最大值或者最小值了.然后将剩余n-1(假设原来总共有n个元素)未排序的序列重新构