快速排序:
快速排序的算法是基于分治而言的,定义两个指针left和right和一个a[start]参考值是其中的关键,主要的思想就是先移动右边的指针不断判断是不是大于等于参考值,如果大于等于那么就往左边移动,同理左边的指针要不断判断是不是小于等于参考值,小于等于的话就往右边移动,知道碰到一起了,那么现在指针所指的值就会是一个中间的界限,只要把此时的i,j和原来的参考值进行交换即可,再采用递归的思想对边界左边和右边的数组进行排序即可
核心代码:
while (a[e1] >= flag && s1 < e1) e1--;//从右边开始
while (a[s1] <= flag && s1 < e1) s1++;
if (s1 < e1) swap(a[s1], a[e1]);
#include <iostream>
#include <vector>
using namespace std;
#define N 100010
void qsort(int a[], int s, int e) {
if (s >= e) return;
int s1 =s;
int e1 = e;
int flag = a[s];//保存原值
while (s1 < e1) {
while (a[e1] >= flag && s1 < e1) e1--;//从右边开始
while (a[s1] <= flag && s1 < e1) s1++;
if (s1 < e1) swap(a[s1], a[e1]);
}
swap(a[s1],a[s]);
qsort(a, s, s1-1);
qsort(a, s1+1, e);
}
int main() {
int n;
scanf("%d", &n);
int a[N];
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
qsort(a, 0, n - 1);
for (int i = 0; i < n; i++) {
if (i == 0) cout << a[i];
else cout << ' ' << a[i];
}
cout << endl;
return 0;
}
总结:快速排序是一个非常基础的算法,掌握这个算法也可以更好的了解分支的思想,毕竟正常不会考这个算法,有现成的algorithm库中的sort即可
归并排序:
归并排序也是基于分治的算法的,主要的思想就是不断的拆解然后组装,代码就不展示了,直接用sort函数即可,封装在algorithm头文件中