前置知识
所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 —百度百科
实现代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void bubbleSort(int a[], int len) {//冒泡排序 从小到大
bool flag;//用来标记是否存在交换
for (int i = 0; i < len - 1; i++) {
flag = false;
for (int j = len - 1; j > i; j--) {
if (a[j] < a[j - 1]) {
swap(a[j], a[j - 1]);
flag = true;
}
}
if (!flag) return;//小优化 一趟下来没有交换便表示排好序了,返回即可
}
}
int partition(int a[],int L,int R) {//快速排序 将子表排序并返回中心轴位置
int key = a[L];
while (L < R) {//从两边向中间遍历
while (L<R && a[R]>=key) --R; //从后往前找小于基准的
a[L] = a[R]; //移到前面
while (L<R && a[L]<=key) ++L; //从前往后找大于基准的
a[R] = a[L]; //移到后面
}
a[L] =key; //遍历到相同位置,小于基准的都放在了这个位置前面,大于基准的都放在了这个位置后面,将基准放到这个位置
/*for (int i = 0; i < 10; i++) cout << a[i] << " ";
cout << endl;*/
return L; //返回中心轴位置
}
void qSort(int a[],int L,int R) {//快速排序
if (L < R) {
int mid = partition(a, L, R);
qSort(a, L, mid - 1);
qSort(a, mid + 1, R);
}
}
int main() {
int a[10];
cout << "冒泡排序:" << endl;
for (int i = 0; i < 10; i++) cin >> a[i];
bubbleSort(a, end(a) - begin(a)); //冒泡排序
for (int i = 0; i < 10; i++) cout << a[i] << " ";
cout << endl;
cout << "快速排序:" << endl;
for (int i = 0; i < 10; i++) cin >> a[i];
qSort(a, 0, end(a) - begin(a) - 1); //快速排序
for (int i = 0; i < 10; i++) cout << a[i] << " ";
cout << endl;
return 0;
}
//样例: 5 1 4 2 6 9 3 8 7 0