冒泡排序优化

【问题描述】

  有n个10以内的随机数, 请利用冒泡排序将他们按照从小到大的顺序排列并输出。 输入: 两行, 第一行一个整数n, 第二行n个随机正整数。( 1<=n<=100 ) 输出: 一行, 升序排列的整数序列。

【样例输入】

  6

  1 2 5 3 4 6

【样例输出】

  1 2 3 4 5 6

#include<iostream>
using namespace std;

int main(){
    int a[101]={}; 
    int n, flag;
    cin>>n;
    for(int i=1; i<=n; i++) cin>>a[i];
    // 比较n-1趟。
    // 6 1 2 3 4 5 -> 1 2 3 4 5 6 
    for(int i=1; i<=n-1; i++){
        flag=1; // 假设序列是依次升序的(已排好序)。 
        for(int j=1; j<=n-i; j++){
            if(a[j]>a[j+1]){
                flag=0; // 交换前,序列没排好序。 
                swap(a[j], a[j+1]);
            }
        }
        if(flag) break; // 既然已排好序,跳出外层循环。 
    } 
    for(int i=1; i<=n; i++) cout<<a[i]<<" ";
    return 0;
}

 

posted @ 2022-07-28 18:00  Hi,小董先生  阅读(57)  评论(0)    收藏  举报