输入n�个正整数,将它们按从小到大的顺序进行排序。 输入描述 第一行一个整数n�(1≤n≤501≤�≤50),表示需要输入的正整数的个数; 第二行为用空格隔开的n�个正整数(每个正整数均不超过100)。 输出描述 输出一行,表示输入的n�个正整数。整数间用一个空格隔开,行末不允许有多余的空格。
时间: 2024-03-10 15:47:41 浏览: 187
这道题可以使用排序算法来解决,常见的排序算法有冒泡排序、插入排序、选择排序、归并排序、快速排序等。这里我们介绍一下冒泡排序和快速排序两种算法。
1. 冒泡排序
冒泡排序是一种比较简单的排序算法,它的基本思想是相邻的两个元素进行比较,如果它们的顺序不对,就交换它们的位置,直到所有元素都排好序为止。这个过程有点像水泡在水中上浮的过程,因此称为冒泡排序。
```c++
#include <iostream>
using namespace std;
void bubble_sort(int a[], int n)
{
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (a[j] > a[j+1]) {
swap(a[j], a[j+1]);
}
}
}
}
int main()
{
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
bubble_sort(a, n);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
```
2. 快速排序
快速排序是一种基于分治思想的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分的所有记录均比另一部分的所有记录小,然后对这两部分记录分别进行快速排序,以达到整个序列有序的目的。
```c++
#include <iostream>
using namespace std;
void quick_sort(int a[], int left, int right)
{
if (left >= right) {
return;
}
int i = left, j = right;
int pivot = a[left];
while (i < j) {
while (i < j && a[j] >= pivot) {
j--;
}
a[i] = a[j];
while (i < j && a[i] <= pivot) {
i++;
}
a[j] = a[i];
}
a[i] = pivot;
quick_sort(a, left, i-1);
quick_sort(a, i+1, right);
}
int main()
{
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
quick_sort(a, 0, n-1);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
```
这两种算法的时间复杂度都为 O(n^2),但是快速排序通常比冒泡排序更快,因为它比较的次数更少。另外,C++ STL 中也提供了 sort 函数可以用来进行排序,它的时间复杂度为 O(nlogn),更加高效。使用 sort 函数的示例如下所示:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a+n);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
```
阅读全文