快速排序

  今天发现一个问题,我手写的快排不好用,于是正好学习一下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;
}

 

 

 

  圆满完成。

posted @ 2018-09-10 20:11  potato226  阅读(106)  评论(0编辑  收藏  举报