#include<iostream>
#include<cstring>
#include<stdio.h>
#include<stdlib.h> // qsort head file
#include<algorithm> // sort head file
using namespace std;
int cmp(const void *a, const void *b)
{
//return (*(int *)a-*(int *)b); // 升序排列
return (*(int *)b-*(int *)a); // 降序排列
}
bool compare(int a, int b)
{
//return a < b; // 升序排列
return a > b; // 降序排列
}
int main()
{
//1 定义变量
int n;
int a[1000];
memset(a, 0, sizeof(a));
//2 输入数列
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
//3 输出排序前数列
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << endl;
cout << endl;
//4 模板库快速排序
qsort(a, n, sizeof(a[0]), cmp);
sort(a, a+n, compare);
//5 输出排序后数列
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
// 排序总结:
// 时间复杂度:插入排序、冒泡排序、选择排序:O(n2)
// 时间复杂度:快速排序、堆排序、归并排序: O(nlog2n)
// 时间复杂度:桶排序: O(n)
// 适用场景:
// 快速排序:是目前基于比较的内部排序中最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短。
// 桶排序: 当待排序的记录的关键字在一个明显有限范围内时,且空间允许,建议使用桶排序。
// 冒泡排序:当参加排序的序列局部或整体有序时,能达到较快的排序速度。
// 选择排序:当 n 较小,选择排序最容易理解。