//代码如下
//建议复制到编译器再看
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
//冒泡排序
//我用升序来举例解释:
//外层循坏n-1次 每次循环都有一个数已经在需要排的位置(每次比较都将大的数往后移动)
// 为什么要减1?你可以想想,找规律:
// 当只有一个数时,已经有序; 两个数最多需要交换一次; 三个数最多需要交换两次
// 上面你可以理解了,那来理解当有n个数时,每次循环都会将未排序中的最大的数移动到
// 未排序数的最后,那就是最大数已经有序(在它该在的位置),那下一次需要排序的数就减少一个
// 倒着理解,第n次减1=n-1 ,第n-1次减1=n-1 ..... 第2次 n-(n-1)=1 最后只有一数就不循环了
// 所以进行n-1次
//内层循环n-i-1次 首先为什么减1,因为我们每次要比较相邻的两个数,减1是防止数组越界.
// (为什么会越界?)当来到最后的数是,你是不是要和它的后面的数比较,那不就越界了吗
// 所以我们只要循环到第n-1个数就行。 为什么还要减i,因为每次外循环都有一个最大数排好序,所以进行几次外循环就要减几个数
//
void BubbleSortAsc(int arr[],int n);
void BubbleSortDesc(int arr[],int n);
//升序
void BubbleSortAsc(int arr[],int n){
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(arr[j]>arr[j+1]){
int max = arr[j];
arr[j] = arr[j+1];
arr[j+1] = max;
}
}
}
}
//降序
void BubbleSortDesc(int arr[],int n){
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(arr[j]<arr[j+1]){
int min = arr[j];
arr[j] = arr[j+1];
arr[j+1] = min;
}
}
}
}
int main(){
//输入n个数
int n;
cin>>n;
int arr1[n];
int arr2[n];
int arr3[n];
//将要排序的一串数存入数组
for(int i=0;i<n;i++){
cin>>arr1[i];
arr2[i]=arr1[i];
arr3[i]=arr1[i];
}
BubbleSortAsc(arr1,n);//升序
BubbleSortDesc(arr2,n);//降序
//输出
for(int i=0;i<n;i++){
cout<<arr1[i]<<" ";
}
cout<<""<<endl;
for(int i=0;i<n;i++){
cout<<arr2[i]<<" ";
}
//学完这个,如果你在写算法题,可以用sort(first,last,comp); [first,last)左开右闭
cout<<""<<endl;
sort(arr3,arr3+n);//升序 --C++自带
for(int i=0;i<n;i++){
cout<<arr3[i]<<" ";
}
cout<<""<<endl;
sort(arr3,arr3+n,greater<int>()); //降序 --C++自带
for(int i=0;i<n;i++){
cout<<arr3[i]<<" ";
}
system("pause");
return 0;
}