美文网首页
【冒泡排序】丢掉想象中的"艰难险阻"

【冒泡排序】丢掉想象中的"艰难险阻"

作者: 秣禾 | 来源:发表于2020-06-12 17:55 被阅读0次

    牢记:

    把小(大)的元素往前(后)调

    原理:

    1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    3. 针对所有的元素重复以上的步骤,除了最后一个。
    4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    冒泡排序流程图:

    冒泡排序流程图.jpg

    时间复杂度:

    冒泡排序最好时间复杂度为O(n);
    冒泡排序最坏时间复杂度为O(n^2);
    冒泡排序总的平均时间复杂度为O(n^2).

    算法描述:

    C语言

    #include <stdio.h>
     
    #define ARR_LEN 255 /*数组长度上限*/
    #define elemType int /*元素类型*/
     
    /* 冒泡排序 */
    /* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
    /* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
    /* elemType arr[]: 排序目标数组; int len: 元素个数 */
    void bubbleSort (elemType arr[], int len) {
        elemType temp;
        int i, j;
        for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
            for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
                if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
    }
     
    int main (void) {
        elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
        int len = 10;
        int i;
         
        bubbleSort (arr, len);
        for (i=0; i<len; i++)
            printf ("%d\t", arr[i]);
        putchar ('\n');
         
        return 0;
    }
    

    C++

    #include <iostream>
    using namespace std;
    template<typename T>
    //整数或浮点数皆可使用
    void bubble_sort(T arr[], int len)
    {
        int i, j;  T temp;
        for (i = 0; i < len - 1; i++)
            for (j = 0; j < len - 1 - i; j++)
            if (arr[j] > arr[j + 1])
            {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
    }
    int main()
    {
        int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 };
        int len = (int) sizeof(arr) / sizeof(*arr);
        bubble_sort(arr, len);
        for (int i = 0; i < len; i++)
            cout << arr[i] << ' ';
     
        cout << endl;
     
        float arrf[] = { 17.5, 19.1, 0.6, 1.9, 10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 };
        len = (int) sizeof(arrf) / sizeof(*arrf);
        bubble_sort(arrf, len);
        for (int i = 0; i < len; i++)
            cout << arrf[i] << ' ';
     
        return 0;
    }
    

    Java

     public static void bubbleSort(int arr[]) 
    {
     
            for(int i =0 ; i<arr.length-1 ; i++)
            { 
               
                for(int j=0 ; j<arr.length-1-i ; j++) 
                {  
     
                    if(arr[j]>arr[j+1]) 
                {
                        int temp = arr[j];
                         
                        arr[j]=arr[j+1];
                         
                        arr[j+1]=temp;
                }
                }    
            }
        }
    

    Python

    def bubble(bubbleList):
        listLength = len(bubbleList)
        while listLength > 0:
            for i in range(listLength - 1):
                if bubbleList[i] > bubbleList[i+1]:
                    bubbleList[i], bubbleList[i+1] = bubbleList[i+1], bubbleList[i]
            listLength -= 1
        print bubbleList
     
    if __name__ == '__main__':
        bubbleList = [3, 4, 1, 2, 5, 8, 0]
        bubble(bubbleList)
    

    汇编语言

    有一个首地址为A的5个有符号数字的数组,请采用“冒泡”排序
    DATAS SEGMENT
    A  DW 9,4,26,85,38
    DATAS ENDS
    CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
    START:
        MOV AX,DATAS
        MOV DS,AX
        MOV DI,4;初始化外循环次数为数组个数-1
     LP1:MOV CX,DI;外循环次数初值为数组个数-1
         MOV  BX,0;基址初值BX为0
      LP2:MOV AX,A[BX]
        CMP AX,A[BX+2]
        JGE CONT;大于等于不交换
        XCHG AX,A[BX+2];小于交换,AX保存的为较大的数
    MOV A[BX],AX;A[BX]保存的为较大的数,准备进行下一次比较,
      CONT:ADD BX,2;基址初值BX+2,字变量,下一个字偏移地址+2
    LOOP LP2  ;内循环次数-1,内循环次数是否为0?
        DEC DI;外循环次数-1
        JNZ LP1;外循环次数是否为0?
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
    

    相关文章

      网友评论

          本文标题:【冒泡排序】丢掉想象中的"艰难险阻"

          本文链接:https://www.haomeiwen.com/subject/ogunzhtx.html