冒泡排序

· · 个人记录

此文章我已在博客园发布不算抄袭

什么是冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。 (引用自菜鸟教程)

冒泡排序的基本思想

重复地走访要排序的元素列,依次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。 走访元素的工作要重复地进行,直到没有相邻元素需要交换时,说明全部元素已经排序完成。 走访的元素———比作是一个“气泡”,“气泡“一步一步向上翻滚,完成排序。

冒泡排序的可视化动画

代码展示

从大到小排序

#inlcude <iostream>
using namespace std;
int main(){
    int a[101];
    int n;
    cin>>n;
    for(int i = 1;i<=n;i++){
        cin>>a[i];
    }
    //每趟排好一个数字,第一趟结束把最大值排好到最后一位
    for(int k = 1;k <= n-1;k++){
        for(int i=1;i<=n-k;i++){
            if(a[i]>a[i+1]){//顺序错误
                swap(a[i],a[i+1]);
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<a[i]<<" ";
    }
}

从小到大排序

#inlcude <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趟
    for(int k=1;k<=n-1;k++) {
        //每趟排好一个数字,第一趟结束把最大值排好到最后一位
        flag=0;
        for(int i=1;i<=n-k;i++){
            if(a[i]>a[i+1]){//顺序错误
                swap(a[i],a[i+1]);
                flag=1;
            }
        }
        if(flag==0){ //这趟排序中没有出现交换
            break;//说明已经排好序了,break终止循环
        }
    }
    for(int i=1;i<=n;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

}