• 没关注输入,是字符串输入还是数字形式输入。

    像这样 image.png

    • 数组排序的时候。注意是从1开始还是0开始
    • push_back()速度比拼接字符串来的快_lc482T
    • 打印字符串时,可以考虑使用: 字符串.c_str()来打印, 防止PAT卡掉

      1. printf("%s\n", item.c_str());
      1. printf("%08d",n);
    • 快排模板, 还应该注意下标问题,比如x = q[l+r>>1],且后续递归分为l到j以及

    j + 1 到 r, 而不能写成l到i。

        while(i < j){ // 注意是i < j,如果是i <= j则可能导致错误
            do i++; while(q[i] < x);
            do j--; while(q[j] > x);
            if(i < j) swap(q[i], q[j]);
        }
    
    • 归并排序
      LL merge_sort(int l, int r){
        if(l >= r) return 0 ;
        int mid = l + r >> 1;
        LL res = 0;
        res += merge_sort(l, mid);
        res += merge_sort(mid + 1, r);
        int i = l, j = mid + 1, k = 0;
        while(i <= mid && j <= r){ 
            if(q[i] <= q[j]) temp[k++] = q[i++]; // 注意这里是q[i] <= q[j],否则会将前后相等时也算逆序。
            else {
                res += mid - i + 1;
                temp[k++] = q[j++];
            }
        }
        while(i <= mid) {
            temp[k++] = q[i++];
        }
        while(j <= r) temp[k++] = q[j++];
        for(int i = l, j = 0; i <= r; i++, j++) q[i] = temp[j];
        return res;
      }