1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-06-10 11:57:15 +08:00
This commit is contained in:
Didnelpsun
2022-11-08 23:16:54 +08:00
parent a21a40ca75
commit 4089cbab30
2 changed files with 66 additions and 13 deletions

File diff suppressed because one or more lines are too long

View File

@@ -12,7 +12,11 @@
## 插入排序
插入排序的排序序列分为非排序和已排序序列。插入排序就是将选定的目标值插入到对应的位置。
### 插入排序共性
+ 插入排序的排序序列分为未排序序列和已排序序列。
+ 插入排序就是将选定的目标值插入到对应的位置,然后不断增长已排序序列并缩减未排序序列的过程。
+ 每一趟排序都不能保证有一个元素到达最终的位置上。
### 直接插入排序
@@ -39,7 +43,7 @@
#### 直接插入排序特性
+ 在待排序的元素序列基本有序的前提下,直接插入排序效率最高的。
+ 直接插入排序进行$n$躺后能保证前$n+1$个元素是有序的,但是不能保证其都在最终的位置上(如最小的元素在最后一位,这是插入排序的共性)
+ 直接插入排序进行$n$躺后能保证前$n+1$个元素是有序的,但是不能保证其都在最终的位置上。
### 二分插入排序
@@ -64,7 +68,7 @@
#### 二分插入排序特性
+ 对于直接插入的优化仅在于二分查找的比较次数。
+ 二分插入排序进行$n$躺后能保证前$n+1$个元素是有序的,但是不能保证其都在最终的位置上(如最小的元素在最后一位,这是插入排序的共性)
+ 二分插入排序进行$n$躺后能保证前$n+1$个元素是有序的,但是不能保证其都在最终的位置上。
### 希尔排序
@@ -95,7 +99,10 @@
## 交换排序
交换排序即根据序列中两个元素关键的比较结构然后交换这两个记录在序列中的位置。
### 交换排序共性
+ 交换排序即根据序列中两个元素关键的比较结构然后交换这两个记录在序列中的位置。
+ $n$趟排序后就有$n$个元素到达最终的位置上。
### 冒泡排序
@@ -218,16 +225,19 @@ void Bubble(int[] a) {
+ 快速排序在内部排序中的表现最好。
+ 对于基本有序或倒序的序列,快速排序速度最慢。
+ 对于每次的数轴元素能尽量将表分为长度相同的子表,快速排序速度最快。
+ 排序的递归次数与初始序列和选择的枢轴变量有关,与分区处理顺序无关。
## 选择排序
分为已排序和未排序序列。选择排序就是每一趟在待排序元素中选取关键字最小或最大的元素加入有序子序列。
### 选择排序特性
选择排序也需要交换,但是与交换排序的不断交换不同的是选择排序时选择出一个最后进行交换,一趟只交换一次
+ 分为已排序和未排序序列。选择排序就是每一趟在待排序元素中选取关键字最小或最大的元素加入有序子序列
+ 选择排序算法的比较次数始终为$n(n-1)/2$,与序列状态无关。
选择排序也需要插入,且也分为已排序和未排序序列,但是插入排序不需要选择,且元素移动方式是插入而不是交换。
选择排序与其他排序的区别:
选择排序算法的比较次数始终为$n(n-1)/2$,与序列状态无关
+ 选择排序也需要交换,但是与交换排序的不断交换不同的是选择排序时选择出一个最后进行交换,一趟只交换一次
+ 选择排序也需要插入,且也分为已排序和未排序序列,但是插入排序不需要选择,且元素移动方式是插入而不是交换。
### 简单选择排序
@@ -331,6 +341,8 @@ void Bubble(int[] a) {
调整堆从右边即序列末尾开始。
<span style="color:orange">注意:</span>题目如果说是给出序列,然后调整为堆,则证明他这个堆已经建立好了,只需要调整顺序,如果说的是依次插入,则要一边插入一边调整堆。
#### 堆排序性能
堆排序的存储就是它本身,不需要额外的存储空间,要么只需要一个用于交换或临时存放元素的辅助空间。所以空间复杂度为$O(1)$。