算法 - 排序 - 交换排序 (Swap Sort)
返回上级:算法 - 查找与排序 (Searching and Sorting)
常用交换排序:
-
冒泡排序(Bubble Sort),也称起泡排序;
-
快速排序(Quick Sort),也称分区排序,它也是一个递归的过程。
本文将用C++实现插入冒泡排序和快速排序算法。
在查看本文之前,需要一些程序语言的基础。
所有排序方法中,统一使用如下库与结构:
// Author: https://blog.csdn.net/DarkRabbit
// Sorted Dependency
#pragma once
#include <algorithm>
#include <vector>
#include <stack>
template<typename T>
struct MyItem
{
int key;
T data;
MyItem(){
key = -1; }
MyItem(const int& k) : key(k){
}
MyItem(const int& k, const T& d) : key(k), data(d){
}
};
数据表统一使用了std::vector<MyItem<T>>
,如果你使用静态数组MyItem<T>[]
或指针数组MyItem<T>*
,那么还要传入元素数量size
。
示例所用数据:
-
元素数量为
size = 15
; -
关键字为
key = { 123, 122, 565, 22, 3, 64, 73, 44, 287, 6, 9, 83, 25, 42, 13 }
。
文章目录
1 交换排序简述 (Introduction)
交换排序基本思路:根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。
常见交换排序:
-
冒泡排序(Bubble Sort),也称起泡排序
-
快速排序(Quick Sort),也称分区排序,它也是一个递归的过程
假设元素数量为 n ,交换过程:
-
冒泡排序:通过 n-1 次冒泡进行排序,检测到第 i 个关键字时,从 j = {n-1, n-2, n-3 …} 开始依次两两逆序比较(也可以从0开始正序比较),如果左边大则交换。
-
快速排序:起始
i = 0
,j = n-1
- (1)以下标 i 的元素为关键元素,即
key = item[i]
; - (2)从 j 开始依次逆序搜索,直到找到小于 key 的关键字,将
item[j]
于item[i]
交换; - (3)从 i 开始依次正序搜索ÿ
- (1)以下标 i 的元素为关键元素,即