提交时间:2024-03-03 10:07:40
运行 ID: 134851
#include<iostream> using namespace std; int n; struct S{ int num; int time; int noh; }stu[100001]; /* 优化冒泡排序,小-》大 优化点:如果数组已经有序,可无须判断,直接输出 */ void betterbubblesort() { bool flag = false; //数组初始化无序 for (int i = n; i >= 2; i--) { //从前往后冒泡,将最大值移到最后,无序才继续 flag = true; //做个标记,如果该标记被破坏则说明数组无序 for (int j = 1; j < i; j++) { if (stu[j].num > stu[j+1].num) { stu[j].time++; stu[j].noh += stu[j].time; stu[j+1].time++; stu[j+1].noh += stu[j+1].time; swap(stu[j],stu[j+1]); flag = false; } } if(flag == true){ break; } } } int main(){ cin >> n; for(int i = 1;i <= n;i++){ cin >> stu[i].num; } long long re = 0; betterbubblesort(); for(int i = 1;i <= n;i++){ re += stu[i].noh; } cout << re; return 0; }