C++标准库、STL、泛型编程
标准库>STL STL分为六大部分:
容器和算法最重要
归并排序
先递归,再排序
代码实现:
#include <iostream>
using namespace std;
const int N = 100010;
int q[N], tmp[N], t;
void MergeSort(int q[], int l, int h){
//递归终止条件为划分为个数为1的子序列
if(l >= h) return;
//每次以中点划分,递归
int mid = l + h >>1;
MergeSort(q, l, mid);
MergeSort(q, mid + 1, h);
int k = 0, i = l, j = mid + 1;//k是标记放到tmp数组的位置
//排序过程
while(i <= mid && j <= h){
if(q[i] < q[j]) tmp[k++] = q[i++];//每次都是较小的数放在前面
else tmp[k++] = q[j++];
}
//若有剩余,直接把后面的数接到tmp数组后面,
//两个while只会有一个执行。
while(i <= mid) tmp[k++] = q[i++];
while(j <= h) tmp[k++] = q[j++];
//放回原数组
for(int i = l, j = 0; i <= h; i++, j++) q[i] = tmp[j];
}
int main(){
scanf("%d", &t);
for(int i = 0; i < t; i++) scanf("%d", &q[i]);
MergeSort(q, 0, t - 1);
for(int i = 0; i < t; i++) printf("%d ", q[i]);
return 0;
}