新手来学习冒泡排序C++

本文详细介绍了C++中冒泡排序算法的升序和降序实现,以及如何使用C++标准库的sort函数对整型数组进行排序,包括自定义比较函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//代码如下

//建议复制到编译器再看

#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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

motu2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值