zoukankan      html  css  js  c++  java
  • 冒泡排序

    初稿:2017-11-19 19:53:08

     最坏时间复杂度:O(n^2)每一趟都发生交换,持续了array.len-1趟,每一趟的每个单元都发生交换。

    最佳时间复杂度:O(n) 原数组是有序数组或基本有序,只扫描一趟。

    平均时间复杂度是O(n^2)

    稳定性:稳定

    一次性放到终态位置: 是

    适用:大致有序的少量数据

    核心知识点:

    • 两层循环

    for(i = len - 2; i >= 0; --i) {

        for(j = 0; j <= i; ++i) {

        }

    }

    • 标志位

    当某一趟没发生交换,说明数组已经有序,可终止排序,避免后面无谓的扫描。

    #include"头文件.h"
    void BubbleSort(int *a,int len) {
        if (a == null || len < 1)
            return;
        int i, j,temp;
        bool flag;//标志位,可以提前结束循环
        for (i = len - 2; i >= 0; --i) {
            flag = 0;
            for (j = 0; j <= i; ++j) {
                if (a[j] > a[j + 1]) {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    flag = 1;
                }
            }
            if (flag == 0)//flag == 0,说明本趟没发生交换
                return;
        }
    }
    int main() {
        int a[100];
        for (int i = 0; i < 100; ++i) {
            a[i] = 1 + rand() % 100;
        }
        printf("排序前的数组:
    ");
        for (int i = 0; i < 100; ++i) {
            printf("%4d ", a[i]);
            if ((i + 1) % 10 == 0)
                printf("
    ");
        }
        printf("
    ");
        printf("排序后的数组:
    ");
        BubbleSort(a, 100);
        for (int i = 0; i < 100; ++i) {
            printf("%4d ", a[i]);
            if ((i+1) % 10 == 0)
                printf("
    ");
        }
        printf("
    ");
        system("pause");
        return 0;
    }

     

  • 相关阅读:
    HashMap 常问的 9 个问题
    P1855 榨取kkksc03
    Codeforces Round #697 (Div. 3) A. Odd Divisor
    P1474 [USACO2.3]Money System / [USACO07OCT]Cow Cash G
    Codeforces Round #704 (Div. 2) D. Genius's Gambit
    P2800 又上锁妖塔
    P2066 机器分配
    P3399 丝绸之路
    P1351 [NOIP2014 提高组] 联合权值
    P4290 [HAOI2008]玩具取名
  • 原文地址:https://www.cnblogs.com/joyeehe/p/7861121.html
Copyright © 2011-2022 走看看