資源限制
時間限制: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;
}