1、冒泡排序
重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2、选择排序
每次找出最小/最大,确定一个位置
选择排序的交换操作介于0和(n − 1)次之间。选择排序的比较操作为n(n − 1) / 2次之间。选择排序的赋值操作介于0和3(n − 1)次之间。
比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。 交换次数O(n),最好情况是,已经有序,交换0次;最坏情况是,逆序,交换n-1次。 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。
3、SHELL排序(分组插入)
也称为递减增量排序算法,是插入排序的一种高速而安定的改良版。
对有n个元素的可比较资料,先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-1<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
4、插入排序
在已有序列将元素逐个插入到适应的位置
缺点:需移动元素位置
改进:二分查找插入
5、快速排序
快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列sub-lists。
步骤为:
Ø 从数列中挑出一个元素,称为 "基准"(pivot),
Ø 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。
Ø 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
Ø 递回的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递回下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
6、归并排序(分治法)
算法描述
Ø 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
Ø 设定两个指针,最初位置分别为两个已经排序序列的起始位置
Ø 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位
Ø 重复步骤3直到某一指针达到序列尾
Ø 将另一序列剩下的所有元素直接复制到合并序列尾
7、堆排序
选择排序的升级,减小比较次数,利用堆性质,每次找出最大和最小,交换位置后再次构造堆,直到排好序。
Ø 初始化操作:将R[1..n]构造为初始堆;
Ø 每一趟排序的基本操作:将当前无序区的堆顶记录R[1]和该区间的最后一个记录交换,然后将新的无序区调整为堆(亦称重建堆)。
Ø 重复
8、箱排序
箱排序也称桶排序(Bucket Sort),其基本思想是:设置若干个箱子,依次扫描待排序的记录R[0],R[1],…,R[n-1],把关键字等于k的记录全都装入到第k个箱子里(分配),然后按序号依次将各非空的箱子首尾连接起来(收集)。
分配过程的时间是O(n);收集过程的时间为O(m) (采用链表来存储输入的待排序记录)或O(m+n)。因此,箱排序的时间为O(m+n)。若箱子个数m的数量级为O(n),则箱排序的时间是线性的,即O(n)。
分享到:
相关推荐
常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结
常用排序算法总结 数据结构 ppt 课件知识 排序的复杂性 。
冒泡排序和快速排序是两种基础但广泛使用的数据排序算法。冒泡排序由于其简单直观的特性,易于理解和实现,而快速排序则以其较高的效率在数据量较大时展现出优势。 首先,让我们来看冒泡排序算法。冒泡排序通过重复...
排序算法在计算机科学中占有重要地位,它们是数据处理和信息管理的基础。本文将深入探讨四种常见的排序算法:直接插入排序、折半插入排序、冒泡排序和快速排序,并提供相应的C语言源代码实现。 1. 直接插入排序: ...
常用排序算法总结,包括插入排序(InsertionSort),冒泡排序(BubbleSort),选择排序(SelectionSort),快速排序(QuickSort), * 二路归并排序(MergeSort),堆排序(HeapSort)。有每一种排序算法的复杂度分析以及实现...
本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其关键字序列分别为K1, K2, ..., Kn,如果存在一个排列p1, p2, p3, ..., pn,使得关键字满足非...
快速排序是最常用的排序算法之一,由C.A.R. Hoare提出。它采用分治策略,选取一个“基准”元素,将数组分为两部分,使得一部分所有元素小于基准,另一部分所有元素大于基准,然后递归地对两部分进行快速排序。平均...
### 数据结构中几种常用的排序算法总结 #### 一、引言 在计算机科学与数学领域,排序算法是一种能够按照特定顺序(如数值顺序或字典顺序)排列一系列数据的算法。排序算法对于许多其他算法(如搜索算法和合并算法)...
### 常用排序算法的比较 #### 一、设计内容和要求 1. **设计内容**:通过随机函数产生N个随机整数,并采用多种排序算法对这些数进行排序,进而分析各种算法所需的排序时间,以确定哪些算法更为高效。 2. **设计...
一、问题描述 本项目旨在实现并比较六...总结,这个项目提供了对C语言实现的排序算法的深入理解和实践,通过对各种排序方法的性能测试,我们可以更好地理解它们在不同场景下的适用性,并为实际问题选择合适的排序算法。
【排序算法】是计算机科学中一个重要的领域,它涉及到如何有效地组织和整理数据,以便于快速查找、访问和处理。本文将对几种常见的排序算法进行详细的解析,包括冒泡排序、交换排序、选择排序和插入排序,这些都是在...
本文主要总结和比较了九种常见的排序算法:快速排序、归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序以及基数排序。 1. **快速排序**:快速排序是一种基于分治思想的高效排序算法,由C.A.R....
总结来说,了解和掌握这些基本排序算法有助于开发者根据具体需求选择合适的排序方法,无论是为了优化性能还是为了理解算法的内在逻辑。在实际编程中,可以根据数据规模、是否已经部分排序等因素来选择使用冒泡排序、...
### 几种内部排序算法总结 #### 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,...
排序查找算法总结 排序算法是计算机科学中的一种基本算法,用于对数据进行排序。在各种排序算法中,每种算法都有其特点和应用场景。本文将对10种经典的排序算法进行总结,并对每种算法的时间复杂度、空间复杂度和...