排序

排序

Turbo 263 2023-05-22

排序

一、冒泡排序

冒泡排序(Bubble Sort)是一种最简单的排序方法,其基本思想是两两比较相邻记录的关键字,若反序,则交换相邻两记录。冒泡排序的处理过程如下:
首先,将第一个记录的关键字值与第二个关键字值进行比较。若为反序(即r[j].key > r[j+1].key),则交换之。然后比较第二个记录和第三个记录得关键字值。依此类推,直到第n-1个记录关键字值和第n个记录的关键字值进行比较。上述过程称为冒泡排序的第一趟处理,第一趟处理结果使得关键字值最大的记录被放在最后一个位置上。
接下来进行第二趟处理,即对前n-1个记录进行类似处理,其结果是使得关键字值次大的记录被放到倒数第二的位置上。
一般来说,冒泡排序的第i趟处理是从r[0]到r[n-i],依次比较相邻两个记录的关键字,并在反序时交换相邻的记录,其结果是将这n-i+1个记录中关键字值最大的元素交换到第n-i+1的位置上。整个排序过程需要进行n-1趟处理,第n-1趟处理使关键字值为倒数第二的记录放在第二的位置上,这时整个排序过程结束。

冒泡排序算法的执行时间取决于排序的趟数。在最好情况下,待排序记录序列为正序,算法只需要执行一趟,进行n-1次关键字值的比较,不需要移动记录,时间复杂度为O(n)。
最坏情况下,待排序记录序列为反序,每趟排序中只有一个最大的记录被交换到最终位置;因此算法需要执行n-1趟。因此算法的时间复杂度为O(n2)。

冒泡排序是一种稳定的排序方法

二、选择排序

选择排序基本思想是每趟排序在当前待排序序列中选出关键字值最小的记录并添加到有序序列中。第i趟处理过程是在n-i+1(i=1,2,…,n-1)个记录中,通过n-i次关键字值的比较选取关键字值最小的记录,并与第i个记录进行交换。

选择排序总的时间复杂度为O(n2)。

选择排序是一种不稳定的排序方法

三、插入排序

插入排序的基本思想是将待排序表看作是左、右两部分,其中左边为有序区,右边为无序区;整个排序过程就是将右边无序区中的记录依次按关键字大小逐个插入到左边有序区中,以构成新的有序区,直到全部记录都排好序。

3.1 直接插入排序:

直接插入排序具体的排序过程是:

  1. 将整个待排序的记录序列划分成有序区和无序区,

3.2 折半插入排序: