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

     

  • 相关阅读:
    retain assign copy (unsigned long)
    myeclipse未设置断点,但不断跳出debug
    SOAP tomcat7.0 HelloWorld
    JAVA第二天数据类型和循环
    java中产生随机数的几种方法
    java的第一个程序 Hello World
    java中产生随机数的几种方法
    用加减来简单的看策略类
    用加减来简单的看策略类
    奇数阶幻方
  • 原文地址:https://www.cnblogs.com/joyeehe/p/7861121.html
Copyright © 2011-2022 走看看