经典排序算法之一:冒泡排序

经典排序算法之一:冒泡排序

1、理解:
关于冒泡我们可以从生活中观察到,水底的一个小的气泡,在上浮的过程中会慢慢的变大(原理:由于越靠近水面,水的压强就越小,对气泡的压力就越小,气泡内部要保持力平衡就通过体积变大来减小内部的压力。)在空气中小气球不容易飞起来,大气球容易飞起来。

冒泡排序:在排序数列中重复访问要排序的数列,并且一次要访问所有元素。

一次比较两个元素,

1、如果两个元素是(“小”,“大”)的顺序,则把“大”这个元素和数列中的下一元素个比较。

2、如果两个元素是(“大”,“小”)的顺序,则把这两个元素调换顺序,变成(“小”,“大”)的顺序,然后在把(“大”)这个元素和数列中的下一个元素比较

比较过程中一直重复这两个步骤。

没我们想的难么难也没我们想的那么简单吧(反正我是挺蒙的),它就是重复换位置的一个过程。

2、伪代码

main(){
定义数组储存排序数列:int [] a =new a[size];
重复走访数列:for(int i=0;i<a.length;i++){
判断是否排序完成:flag=true,
比较数列中两数的大小,按照“小在前大在后”交换位置:
for(int j=0;j<a.length-i;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=false;
}}}
return a;}

3、代码实现
Java

import java.util.Arrays;
import java.util.Scanner;
/**
 * @Author:不秃头(tootou)
 * @DATE:2023/4/8 23:34
 */
public class AlgorithmOne {
    public static void main(String[] args) {
        int[] a = new int[10];
        //输入数列放入a数组中
        Scanner input = new Scanner(System.in);
        System.out.print("输入10个两位数:");
        for (int i = 0; i < 10; i++) {
            int number = input.nextInt();
            a[i] = number;
        }
        //算法实现
        for (int i = 1; i < a.length; i++) {
            //设定一个标记,判断是否排序好
            boolean flag = true;
            for (int j = 0; j < a.length - i; j++) {
                if (a[j] > a[j + 1]) {
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    flag = false;
                }
            }
            if(flag){
                break;
            }
        }
        System.out.print(Arrays.toString(a));
    }
}

结果:
在这里插入图片描述

python

if __name__ == '__main__':
    print("输入每个数并用空格隔开:")
    L = list(map(int, input().split()))
    for i in range(1, len(L)):
        for j in range(0, len(L) - i):
            if L[j] > L[j + 1]:
                temp = L[j]
                L[j] = L[j + 1]
                L[j + 1] = temp
     print(L)

结果:

参考文献:
https://www.runoob.com/w3cnote/bubble-sort.html
https://www.tootou.com/archives/15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值