排序算法之冒泡排序

本文介绍了冒泡排序算法的原理和过程,通过Python、C和汇编语言展示了冒泡排序的实现。冒泡排序是一种简单的排序算法,通过比较相邻元素并交换位置逐步将最大或最小元素移动到正确位置,直至整个数列有序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从今天开始,给大家介绍各种算法,立志一天介绍一种算法,今天就先给大家介绍排序算法,采用python,C,汇编三种语言分别给大家做说明

冒泡排序的定义:

冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。

它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!

算法过程如图所示

z

我们先分析下第一趟,i=5:

当j=0时,a[0]<a[1]。此时,不做任何处理!
当j=1时,a[1]>a[2]。此时,交换a[1]和a[2]的值;交换之后,a[1]=30,a[2]=40。
当j=2时,a[2]>a[3]。此时,交换a[2]和a[3]的值;交换之后,a[2]=10,a[3]=40。
当j=3时,a[3]<a[4]。此时,不做任何处理!
当j=4时,a[4]>a[5]。此时,交换a[4]和a[5]的值;交换之后,a[4]=50,a[3]=60。

第一趟下来后a[5]是最大的;

第二趟i=4,我们只需要分析a[0....4],结束后数列中a[4,5]是有序的。

第三趟i=  3我们只需要分析a[0....3],结束后数列中a[3,4,5]是有序的。

第四趟i =2我们只需要分析a[0....2],结束后数列中a[2,3,4,5]是有序的。

第五趟i = 1我们只需要分析a[0....1],结束后数列中a[0,1,2,3,4,5]是有序的。

实现代码:

1.Python实现:

ARRAY = [20, 40, 30, 10, 60, 50]
for i in range(len(ARRAY) - 1, 0, -1):
    for j in range(0, i):
        if ARRAY[j] > ARRAY[j + 1]:
            flag = ARRAY[j]
            ARRAY[j] = ARRAY[j + 1]
            ARRAY[j + 1] = flag

2.C语言

    int i,j;
    int array[6]={20, 40, 30, 10, 60, 50}
    for (i=n-1; i>0; i--)
    {
        // 将array[0...i]中最大的数据放在末尾
        for (j=0; j<i; j++)
        {
            if (array[j] > array[j+1])
                swap(array[j], array[j+1]);
        }
    }

3.汇编语言实现

DATAS SEGMENT
    ARRAY DB 20, 40, 30, 10, 60, 50
    NUM EQU $-ARRAY  
    NEWSPACE DB '  ','$'
DATAS ENDS

STACKS SEGMENT
    
    DW 40H DUP(?)
    TOP LABEL WORD
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    LEA SP,TOP
    MOV CX,NUM
    LEA BX,ARRAY
    MOV SI,0
    MOV DI,0
    DEC CX ;需要对比几趟
OUTTER:
	PUSH CX;保存外层第几趟
	
	MOV DI,0
INNER:
	
	MOV AL,[BX+DI];前后俩数大小
	MOV AH,[BX+DI+1];前后俩数大小
	CMP AL,AH;前后俩数大小
	JA XCHANGE;前者大于后者则交换位置
NEXT:
	
	INC DI
	LOOP INNER 
	
	POP CX
	
	LOOP OUTTER
	JMP EXIT

XCHANGE:
    ;交换位置
	XCHG AL,AH
	MOV [BX+DI],AL
	MOV [BX+DI+1],AH
	JMP NEXT
    
    
EXIT:
	MOV CX,NUM
	MOV SI,0
	PRINTF:
		XOR AX,AX
		PUSH CX
		MOV AL,ARRAY[SI]
		INC SI
		MOV CX,0
		PUSHIN:
			XOR DX,DX
			MOV BX,10
			DIV BX
			PUSH DX
			INC CX
			CMP AX,0
			JNE PUSHIN
		POPOUT:
			POP DX
			ADD DL,30H
			MOV AH,2H
			INT 21H

			LOOP POPOUT
		
		POP CX
		LEA DX,NEWSPACE
		MOV AH,9H
		INT 21H
		LOOP PRINTF
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值