数据结构-排序算法总览

1、排序

通常将数据元素称为记录。显然我们输入的是一个记录集合,排序输出的也是一个记录集合。可以将排序看成线性表的一种操作。

排序的依据是关键词之间的大小关系,对同一记录集合,针对不同的关键字进行排序,可以得到不同的序列。

2、影响排序算法性能的几个要素

1)时间性能;尽可能少的关键字比较次数和记录移动次数

2)辅助空间;使用内存较小

3)算法的复杂度;

3、排序算法的种类

简单分为两大类:

简单算法:冒泡排序,简单选择排序,直接插入排序;
改进算法:希尔排序,堆排序,归并排序,快速排序;

根据时间复杂度分为3类:

O(n2):冒泡,选择,插入,希尔;

O(nlogn):并归,快速,堆;

O(n):计数,桶,基数;

  • 均按从小到大排列
  • k代表数值中的"数字"个数
  • n代表数据规模
  • m代表数据的最大值减最小值

原文地址:https://www.cnblogs.com/lemonzhang/p/12398399.html

时间: 2024-08-04 22:59:08

数据结构-排序算法总览的相关文章

黑马程序员——数据结构排序算法总结

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 下面是几个网上常见的总结图: 有些不同之处:集中在希尔排序的时间复杂度.快速归并的空间复杂度上 个人总结口诀: 选择N方-->选择排序的最好最坏平均都N方 插入冒泡最好N-->插入冒泡的最好是N,其他是N方 归并堆n乘logN-->归并希尔堆的最好最坏平均都是n乘logN 快速最坏N方-->快速排序的最坏是N方,其他是n乘logN 快速选择希尔堆不稳定-->

数据结构排序算法Java实现

闲的无聊又拿起了大学的数据结构的书看起来 <数据结构(c语言版)>严蔚敏 吴伟民编著. 里面有几个排序算法,感觉挺好玩的,就想着写出来玩玩. package test.sort; /** * @Title: TODO * @Description: TODO * @author: * @date: 2014-8-10 上午11:20:43 * */ public class quickSort { private static int datas[] = {23,42,12,45,56,63,

数据结构——排序算法总结

排序(Sorting)就是将一组对象依照规定的次序又一次排列的过程,排序往往是为检索而服务的.它是数据处理中一种非常重要也非经常常使用的运算.比如我们日常学习中的查字典或者书籍的文件夹.这些都事先为我们排好序,因此大大减少了我们的检索时间,提高工作效率. 排序可分为两大类: 内部排序(Internal Sorting):待排序的记录所有存放在计算机内存中进行的排序过程: 外部排序(External Sorting):待排序的记录数量非常大,内存不能存储所有记录.须要对外存进行訪问的排序过程. 外

数据结构-排序算法总结

排序算法 算法分析 算法稳定性 如果一种排序算法不会改变关键码值相同的记录的相对顺序,则称为稳定的(stable) 不稳定的算法在某种条件下可以变为稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法.例如,对于冒泡排序算法,原本是稳定的排序算法,如果将记录交换的条件改成a[j].key>=a[j+1].key,则两个相等的记录就会交换位置.再如,快速排序原本是不稳定的排序方法,但若待排序记录中只有一组具有相同关键码的记录,而选择的轴值恰好是这组相同关键码中的一个,此时的快速排序就是稳定的

数据结构排序算法之快速排序

排序算法包括很多种,其中快速排序是其中一种比较快的排序算法,今天就来介绍一下: 快速排序的基本实现思想就是将当前待排序列分成两个部分.一个值.一个值:就是选定出一个值作为被比较的元素.两个部分:所有比该被选定元素大的部分都去该元素的右边,所有比被选定元素小的部分都去该元素的左边.这样我们就确定了该元素在这个待排序列中的位置,其实也就是我们已经将这个元素“排好了”. 那么,怎么才能完成一次的快速排序呢? 我们选定一个被比较的元素,一般都是选第一个,即数组中第一个元素作为val,然后我们给出两个指针

数据结构排序算法之选择排序

今天继续介绍一种排序算法:选择排序. 选择排序的基本思想就是从待排序列中选择出最小的,然后将被选出元素和序列的第一个元素互换位置(当前默认是升序排列),则互换完成后第一个元素就是整个序列的最小的元素,则一次选择排序结束.然后我们从剩下的子序列中选择出最小的,然后将该被选出来的元素和该子序列的第一个元素(即整个序列的第二个元素)互换位置,则当前整个序列的第二个元素就是当前序列中的次最小值,第二次选择排序结束.以此类推,直到该待排序列只剩下一个元素后,则整个序列有序. 具体过程如下图所示: 下面就不

自己动手实现数据结构——排序算法1(冒泡、插入、归并、简单选择)(C++实现)

冒泡排序 冒泡排序作为最简单的排序算法.两行for循环即可搞定. 步骤:一.从前到后依次比较相邻两个数大小,若是前面比后面大则将两个数交换位置,这样第一轮最大的一个数便会被交换到最后面. 二.重复一的步骤依次比较(但是最后一个数不需要参与比较,因为第一轮已经选出它最大),选出倒数第二大的. .... 三.直到所有的数都不需要比较则排序成功 例子就不举了,直接实现: buddle.cc #include<iostream> #include<vector> using namespa

数据结构排序算法总结

在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的:若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的.即所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,则说这种排序算法是稳定的,反之,就是不稳定的. 稳定的排序算法如下表所示: 稳定的排序 时间复杂度 空间复杂度 冒泡排序(bubble sort) 最差.平均都是O(n^2),最好是O(n) 1 插入排序(insertion sort

数据结构-排序算法

排序的定义 排序 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列. 排序分为内部排序和外部排序 内部排序 指的是待排序记录存放在计算机存储器中进行的排序过程 外部排序 指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进 行访问的排序过程. 下面只介绍内部排序: 分类 插入排序:直接插入排序.二分法插入排序.希尔排序. 选择排序:简单选择排序.堆排序. 交换排序:冒泡排序.快速排序. 归并排序 基数排序 对