文章目录
一、排序基本概念
- 稳定性:
假设两个值( a 1 , a 2 a_1, a_2 a1,a2)相同,如果经过某一排序算法排序后两值的前后顺序不会发生改变,则称之为稳定排序,否则,为不稳定排序。
- 平均排序复杂度:
- 简单排序:时间复杂度为 O ( n 2 ) O(n^2) O(n2)
- 先进排序:时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)
- 基数排序:时间复杂度为 O ( d ∗ n ) O(d*n) O(d∗n)
二、排序算法思路与代码实现
2.1 简单排序
简单排序包括三个:选择、插入、冒泡,共同点是他们都是稳定的,平均和最坏都是 O ( n 2 ) O(n^2) O(n2),辅助空间都是 O ( 1 ) O(1) O(1)
2.1.1 选择排序
一趟排序思路:每次在无序序列中找到一个最小值,让最小值与无序序列和有序序列的交界处的那个无序值交换。
代码:
void SelectSort(vector<int> L) {
for (int i = 1; i < L.size(); i++) {
// 0位置的值自己有序
int k = i; // k为最小值的索引
// 找到无序序列中的最小值
for (int j = i + 1; j < L.size()