STL 中 sort 函 数 用 法 简 介 做 ACM 题 的 时 候 , 排 序 是 一 种 经 常 要 用 到 的 操 作 。 如 果 每 次 都 自 己 写 个 冒 泡 之 类 的 O(n^2) 排 序 , 不 但 程 序 容 易 超 时 , 而 且 浪 费 宝 贵 的 比 赛 时 间 , 还 很 有 可 能 写 错 。 STL 里 面 有 个 sort 函 数 , 可 以 直 接 对 数 组 排 序 , 复 杂 度 为 n*log2(n) 。 使 用 这 个 函 数 , 需 要 包 含 头 文 件 #include
。 这 个 函 数 可 以 传 两 个 参 数 或 三 个 参 数 。 第 一 个 参 数 是 要 排 序 的 区 间 首 地 址 , 第 二 个 参 数 是 区 间 尾地 址 的 下 一 地 址 。 也 就 是 说 , 排 序 的 区 间 是 [a,b) 。 简 单 来 说 , 有 一 个 数 组 int a[100] , 要对 从 a[0] 到 a[99] 的 元 素 进 行 排 序 , 只 要 写 sort(a,a+100) 就 行 了 , 默 认 的 排 序 方 式 是 升序 。 拿 我 出 的 “ AC 的 策 略 ” 这 题 来 说 , 需 要 对 数 组 t 的 第 0 到 len-1 的 元 素 排 序 , 就 写 sort(t,t+len); 对 向 量 v 排 序 也 差 不 多 , sort(v.begin(),v.end()); 排 序 的 数 据 类 型 不 局 限 于 整 数 , 只 要 是 定 义 了 小 于 运算的 类 型 都 可 以 , 比 如 字符串类 string 。 如 果 是 没有 定 义 小 于 运算的 数 据 类 型 ,或 者想改变排 序 的 顺序 ,就 要 用 到 第 三 参 数 ——比 较函 数 。比 较函 数 是 一 个 自 己 定 义 的 函 数 , 返回值是 bool 型 , 它规定 了 什么样的 关系才是 “ 小 于 ” 。想把刚才的 整 数 数 组 按降序 排 列, 可 以 先定 义 一 个 比 较函 数 cmp bool cmp(int a,int b) { return a>b; } 排 序 的 时 候 就 写 sort(a,a+100,cmp); 假设自 己 定 义 了 一 个 结 构 体 node struct node{ int a; int b; double c; } 有 一 个 node 类 型 的 数 组 node arr[100] , 想对 它进 行 排 序 : 先按 a 值升 序 ...