藍橋杯 景點遊覽 C++算法訓練 HERODING的藍橋杯之路

資源限制
時間限制: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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章