资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
小明来到一个景区游玩,但是他的时间有限,没办法逛遍所有的景点,所以他从网上下载了每个景点的评分,他希望能够使游览的景点的评分总和最高,于是他希望你帮他对于N个景点排下序。
输入格式
输入的第一行包含一个正整数N,表示N个景点。
第二行有N个正整数,表示每个景点的评分值。
输出格式
输出一行,包含N个正整数,表示N个景点的评分从大到小的排列
样例输入
4
3 2 4 1
样例输出
4 3 2 1
数据规模和约定
N<=1000,每个景点的评分<=10000。
解题思路:
这道题目考的是排序知识,而且是降序排序,我这里用三种方法实现,大家可以参考。
1.冒泡排序。
2.插入排序。
3.快速排序。
大家可以具体看我的代码理解一下,这里我简单介绍一下这三个算法,冒泡就是每次循环都把最小的顶上去,插入排序就是把某个值提取出来向左走,直到遇到比这个数大的停止并插入。快速排序是一个递归过程,具体解释需要自我百度搜索才好理解。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[1000];
//冒泡排序
void maopao_sort(int *a,int len){
for(int i = 0; i < len - 1; i ++){
for (int j = 0; j < len - i - 1; j ++){
if (a[j] < a[j + 1]){
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
//插入排序
void InsertSort(int *Data, int n) {
int p, i;
for (p = 1;p < n;p++) {
int temp = Data[p];
int i = p - 1;
while (i >= 0 && Data[i] < temp) {
Data[i + 1] = Data[i];
i--;
}
Data[i + 1] = temp;
}
}
void quicksort(int l,int r) {
int i, j, t, temp;
if (l > r) {
return;
}
temp = a[l];
i = l;
j = r;
while (i != j) {
while (a[j] < temp && i < j) {
j--;
}
while (a[i] >= temp && i < j) {
i++;
}
if (i < j) {
t = a[j];
a[j] = a[i];
a[i] = t;
}
}
a[l] = a[i];
a[i] = temp;
quicksort(l, i - 1);
quicksort(i + 1, r);
return;
}
int main(){
int n, i;
cin >> n;
for (i = 0; i < n; i ++){
cin >> a[i];
}
//maopao_sort(a,n);
//InsertSort(a,n);
quicksort(0,n - 1);
for(i = 0; i < n; i ++){
cout << a[i] << " ";
}
return 0;
}