十大排序--冒泡排序

十大排序

冒泡排序

对于数组[5,9,3,1,2,8,4,7,6]

5 9 3 1 2 8 4 7 6

第一轮比较

首先比较7和6

因为6<7

所以交换位置,交换后变成[5,9,3,1,2,8,4,6,7]

接着比较6和4

因为4<6,位置不变,[5,9,3,1,2,8,4,6,7]

再接着比较4和8

因为4<8,交换位置,交换后变成[5,9,3,1,2,4,8,6,7]

接着比较2和4

因为2<4,位置不变,[5,9,3,1,2,4,8,6,7]

按照这个过程,直到最小的那个数字,放在数组首位

此时数组为[1,5,9,3,2,4,8,6,7]

第二轮比较

首先比较6和7

因为6<7,位置不变,[1,5,9,3,2,4,8,6,7]

接着比较8还和6

因为6<8,交换位置,交换后变成[1,5,9,3,2,4,6,8,7]

依次进行比较,直到2排到1的后边

此轮比较结束,此时数组为[1,2,5,9,3,4,6,8,7]

第三轮比较

经过第三轮比较,数组为[1,2,3,5,9,4,6,7,8]

第四轮比较

经过第四轮比较,数组为[1,2,3,4,5,9,6,7,8]

第五轮比较

经过第五轮比较,数组为[1,2,3,4,5,6,9,7,8]

第六轮比较

经过第六轮比较,数组为[1,2,3,4,5,6,7,9,8]

第七轮比较

记过第七轮比较,数组为[1,2,3,4,5,6,7,8,9]

第八轮比较

经过第八轮比较,得出最终的排序[1,2,3,4,5,6,7,8,9]

冒泡排序总结

假如有N个数,那么需要比较N-1次才可以得出结果

每一轮的比较,都可以将最小的数排到最前面

冒泡排序代码实现

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    int num;
    cin>>num;
    int a[num];
    memset(a,0,sizeof(a));
    for (int i = 0; i < num; ++i) {
        cin>>a[i];
    }
    for (int i = 0; i < num-1; ++i) {
        for (int j = num-1; j > i; --j) {
            int tmp;
            if (a[j]<a[j-1]){
                tmp=a[j];
                a[j]=a[j-1];
                a[j-1]=tmp;
            }
        }
    }
    for (int i = 0; i < num; ++i) {
        cout<<a[i]<<" ";
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章