- 没关注输入,是字符串输入还是数字形式输入。
像这样
- 数组排序的时候。注意是从1开始还是0开始
- push_back()速度比拼接字符串来的快_lc482T
打印字符串时,可以考虑使用: 字符串.c_str()来打印, 防止PAT卡掉
printf("%s\n", item.c_str());
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; }