C++学习笔记#25(2021.6.16)

162 阅读1分钟

C++标准库、STL、泛型编程

标准库>STL STL分为六大部分:

image.png

容器和算法最重要

image.png

归并排序

先递归,再排序

image.png

代码实现:

#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;
}