题目描述
对输入的n个数进行排序并输出。
输入描述:
输入的第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
输出描述
能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
每组测试数据的结果占一行。
示例
输入
4
1 4 3 2
输出
1 2 3 4
时间限制:1秒 空间限制:65536K
解法一:Bubble sort 冒泡排序
直接上代码
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
/*
王道第一题
冒泡排序来解决此题
*/
int number;
while(cin>>number){ //用while来保证多组数据的成功测试
int arr[number];
for(int i=0;i<number;i++){
cin >> arr[i];
}
bool flag = true; //给定flag,减少判定次数
int temp;
for(int i=0;i<number-1&&flag==true;i++){
flag = false;
for(int j=0;j<number-i-1;j++){
if(arr[j]>arr[j+1]){
flag = true; //交换
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i=0;i<number;i++){ //输出格式要正确
cout << arr[i]<<" ";
}
cout << "\n";
}
}
因为时间限制和空间限制要求不是很高,所以冒泡排序可以很好地完成任务
解法二:Quick sort 快速排序
/*
quickSort
*/
#include<iostream>
using namespace std;
int Partition(int arr[], int low, int high){
//对数组进行排序
int pivotkey = arr[low];
while(low<high){
//小的向左移,大的向右移
while(low<high&&arr[high]>=pivotkey) high--;
arr[low] = arr[high];
while(low<high&&arr[low]<=pivotkey) low++;
arr[high] = arr[low];
}
arr[low] = pivotkey;
return low;
}
void quickSort(int arr[], int low, int high){
//选定排序的数组
int pivotloc;
if(low<high){
pivotloc = Partition(arr, low, high);
quickSort(arr, low, pivotloc-1);
quickSort(arr, pivotloc+1, high);
}
}
int main(){
int number;
while(cin>>number){
int arr[number];
for(int i=0;i<number;i++){
cin >> arr[i];
}
quickSort(arr, 0, number-1);
for(int i=0;i<number;i++){
cout << arr[i]<<" ";
}
cout << "\n";
}
}
因为数据量很小,故冒泡排序根快排序比较不出差别。
小技巧:利用C++内置函数sort()
算是奇技淫巧,c++中的algorithm库中有内置排序函数sort()
代码如下
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
int number;
while (cin>>number) {
int arr[number];
for (int i = 0;i < number;i ++) {
cin >> arr[i];
} // ·sort函数:首地址,尾地址,排序格式(可选)
sort (arr,arr + number);
//使用该重载形式,表明将要使用自己定义的排列规则
for (int i = 0;i < number;i ++) {
cout << arr[i] << " " ;
}
cout<< "\n" ;
}
return 0;
}
如果想进行倒序排序,也可以自定义排序格式,即在sort的第三个参数上添加自己的排序函数
如下:
// 倒序排序
bool inverted(int x, int y){
return x > y;
}
sort (arr,arr + number,inverted);