排序算法重要知识点

原创 2015年11月18日 22:41:27

经典排序算法及特性:

这里写图片描述

经典排序算法的空间复杂度:
O(1):冒泡、选择、插入、堆、希尔排序
O(logN)~O(N):快速排序
O(N):归并排序
O(M):计数排序、基数排序

经典排序算法的稳定性:
  稳定性概念:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

稳定的排序:冒泡、插入、归并、计数、基数、桶排序
不稳定的排序:选择、快排、堆、希尔排序

一、时间复杂度为O(N^2)的算法有:冒泡排序、选择排序、插入排序;

1.冒泡排序:
  第一个数与第二个数比较,大的放后面;第二个数与第三个数,第三个数与第四个数……依次比较,这样一来最大数放在最后。前n-1个数重复上述过程即可得到有序数组。

这里写图片描述

2.选择排序:
  在n个数中选出最小的数放在第一个位置,剩下n-1个数选出最小的数放在第二个位置,依次排序。
  或者,找出最大的一个元素,和末尾的元素交换,然后再从头开始,查找第1个到第N-1个元素中最大的一个,和第N-1个元素交换……其实差不多就是冒泡法的思想,但整个过程中需要移动的元素比冒泡法要少,因此性能是比冒泡法优秀的

3.插入排序

http://pic002.cnblogs.com/img/yc_sunniwell/201006/2010062815150025.png

二、时间复杂度为O(nlogn)的算法有:归并排序、快速排序、堆排序、希尔排序;

1.归并排序:  
  第一个数和第二个数,第三个数和第四个数……两两归并、排序,再把相邻的有序区间合并、排序,依次重复进行。

2.快速排序:
  随机选择一个数(例如最后一个数),比它小的放左边,比它大的放右边,左右两部分分别递归排序。

这里写图片描述

3.堆排序

这里写图片描述

  首先建立大小为n的大根堆,堆顶元素(即最大值)与最后一个元素交换,将其脱离大根堆存入有序数组;剩下部分进行大根堆调整后依次拿出堆顶最大值,存入有序数组即可。

4.希尔排序
希尔排序(Shell Sort)是插入排序的一种改良排序算法。关键在于步长的选择。
如图选择步长为4的数比较->步长为3比较->步长为2比较->最终步长为1比较结束。

这里写图片描述

三、时间复杂度为O(n)的算法有:计数排序、基数排序;

不是基于比较的排序算法,思想来自于桶排序。

1.计数排序

将各元素放入排好序的桶中,拿出后即排好序。

2.基数排序

这里写图片描述

先按个位数放入桶中排序,拿出序列;再分别按十位、百位放入桶中排序

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

各种排序算法总结和比较

排序算法可以说是一项基本功,解决实际问题中经常遇到,针对实际数据的特点选择合适的排序算法可以使程序获得更高的效率,有时候排序的稳定性还是实际问题中必须考虑的,这篇博客对常见的排序算法进行整理,包括:插...

java知识点之 排序算法总结

1.插入排序  (1)直接插入排序:稳定  O(n2)时间复杂度    基本思想:和打牌一样,每次将下一个元素插入到已经有序的序列中    算法: package 插入排序; public ...

黑马程序员 知识点总结-Java中几种常见的排序算法

//自定义数组元素位置置换方法 private static void swap(int[] arr,int x,int y){ int temp = arr[x]; arr[x] = ar...

【图说互联网面试笔试必考知识点】之排序算法复杂度/TCP/IP三次握手

话不多说,放图! 1.排序算法 2 图解TCP/IP三/四次握手过程(结合状态码理解) 【注意】 在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,...

知识点11:常见的排序算法–归并排序

相信看过常见的排序算法——快速排序的朋友们都记得,我们在介绍它的时候便阐述了使用快排的两种策略,分别是分治和递归。它的原理是:通过递归的方式,利用某个基底,不断将数列划分为更小的部分。直到小数组不能再...

知识点10:常见的排序算法–希尔排序

希尔排序的原理这次要介绍的希尔算法,对我而言也是个挑战,因为我对它的理解也仅限于皮毛,或者说,仅仅局限在知道原理,如何实现和使用区域上。并且就算是原理,也不清楚对不对,姑且先记下来,希望有路过的大神们...

知识点8:常见的排序算法–选择排序

昨天我们已经介绍了快速排序的原理和实现,并且还通过几个循环渐进的假设来脑补了一回选择排序的执行过程。但很遗憾的是因为这几篇博客都没有在我的电脑上写的,用的是新的linux系统,也没有java执行环境和...

知识点7:常见的排序算法--快速排序

快速排序原理快速排序源于分治策略,是指将一个整体划分为规模更小,但是结构和原理都相同的小部分进行递归操作,最终得出原问题的结果。 恩,看不懂,难理解,怎么办?不怕,我们来举几个假设: 假设1:对数...

C++实现三种重要排序算法

  • 2013年05月23日 22:57
  • 56KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法重要知识点
举报原因:
原因补充:

(最多只允许输入30个字)