快速排序
今天发现一个问题,我手写的快排不好用,于是正好学习一下sort()函数。stl带有快排功能,调用该函数需包含库函数include <algorithm>。
sort()函数的参数列表为sort(待排序数组起点下标, 待排序数组终点坐标, 排序方式),其中的排序方式这个参数很有意思,可以手写一个函数供其调用,最终的排序方式将由排序方式来决定。
下面来看一下具体的代码实现:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int MAXN = 1001; struct Water { int time; int id; }; int n; double sum; Water w[MAXN]; bool cmp(Water a, Water b) { if(a.time < b.time) { return true; } return false; } int main() { scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d", &w[i].time); w[i].id = i; } sort(w + 1, w + 1 + n, cmp); for(int i = 1; i <= n; i++) { printf("%d ", w[i].id); sum += w[i].time * (n - i); } printf("\n%.2lf", sum / n); return 0; }
圆满完成。