蓝桥杯 景点游览 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;
} 

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/106427390