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

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

作者: 秣禾 | 来源:发表于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

相关文章

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

    牢记: 把小(大)的元素往前(后)调 原理: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2. ...

  • 值得键盘敲烂的代码 (冒泡排序)

    排序算法 冒泡排序 冒泡排序动图: 感谢博主: 的博客中的动图

  • 算法总结

    一,排序算法:冒泡排序,选择排序,快速排序,归并排序,插入排序,堆排序,希尔排序冒泡排序:会重复的比较数组中相邻的...

  • 排序算法-swift实现

    1.冒泡排序 时间复杂度:O(n^2) 1.1初级 1.2正宗冒泡排序 1.3冒泡排序优化 问题:排序过程中,如果...

  • 冒泡排序

    冒泡排序,属于内部排序中的交换排序。

  • Python之算法LOB三人组

    一、冒泡排序 a、冒泡排序----优化 如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以...

  • 数据结构与算法 - 排序

    代码实现基于golang version 1.18 1. 冒泡排序 冒泡排序是一种交换排序,核心是冒泡,把数组中...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 算法—冒泡排序

    冒泡排序介绍 冒泡排序(Bubble Sort)它是中较简单的排序算法。它会遍历若干次要排序的数组,每次遍历时,它...

  • 2022-03-01

    1.排序算法: 到底什么是排序?-它是排列列表中项目顺序的算法。 重要的排序算法—— 冒泡排序:冒泡排序是最基本的...

网友评论

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

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