本文主要是介绍题目:宝藏排序Ⅰ(蓝桥OJ 3225),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:
解题思路:
由于本题的数据范围较小(1~1000),因此可以使用O(n2)的冒泡排序或选择排序、插入排序。
题解:
解法一:冒泡排序
#include <iostream>
using namespace std;
const int N = 1030;
int a[N];
int main()
{int n;cin >> n;for(int i = 0; i < n; i++)cin >> a[i];for(int i = n - 1; i >= 0; i-- ) // i表示当前需要确定的位置{for(int j = 0; j <= i - 1; j++) // 是j。需要扫过的区间{if(a[j] > a[j + 1])swap(a[j], a[j + 1]);}}for(int i = 0; i < n; i++)cout << a[i] << ' ';return 0;
}
解法二:选择排序
#include <iostream>
using namespace std;
const int N = 1030;
int a[N];
int main()
{int n;cin >> n;for(int i = 0; i < n; i++)cin >> a[i];for(int i = n - 1; i >= 0; i--) // 需要确定的位置 {int max_id = 0; // 设置初始最大下标 for(int j = 0; j <= i; j++){if(a[j] > a[max_id])max_id = j; // 找到该区间最大下标}swap(a[i], a[max_id]); // 一步交换到需要确定位置}for(int i = 0; i < n; i++)cout << a[i] << ' ';return 0;
}
解法三:插入排序
#include <iostream>
using namespace std;
const int N = 1030;
int a[N];
int main()
{int n;cin >> n;for(int i = 0; i < n; i++)cin >> a[i];for(int i = 1; i < n; i++){int val = a[i], j;for( j = i; j > 0 && a[j - 1] > val; j--) //不能在内部再定义j(不是int j,而是j),否则内部的j就无法影响外部的j。 {a[j] = a[j - 1];}a[j] = val;}for(int i = 0; i < n; i++)cout << a[i] << " \n"[i == n - 1];return 0;
}
这篇关于题目:宝藏排序Ⅰ(蓝桥OJ 3225)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!