C++ 交换排序(冒泡/快速排序)

前置知识

所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 —百度百科

实现代码
#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值