简单排序 --- 冒泡排序算法 (常见经典排序算法)

简介: 简单排序 --- 冒泡排序算法 (常见经典排序算法)

基本思路:

一个数组中重复遍历数组,两两相邻元素依次进行比较,如果前一个元素大于后一个元素,就交换位置,直到数组元素由小到大排序。

编程步骤:

用嵌套循环进行排序,外层循环设置一个 flag=true 进行判断数组是否排序完成,内层循环将数组中两两相邻元素进行比较并交换位置,然后在外层循环判断数组是否排序完成,未排序完成 flag=false,排序完成 flag=true 并退出循环完成排序;

平均时间复制度:image.png


image.png

import java.util.Arrays;
//测试冒泡排序
public class BubbleSortTest {
    public static void main(String[] args) {
        int[] values = {3,1,4,6,22,0,33,2,745,5,56,8};
        System.out.println("values数组原始顺序:"+Arrays.toString(values));
        bubbleSort(values);
    }
    public static void bubbleSort(int[] values){
//把冒泡排序的方法设置成static静态的,不允许改变代码;
        int temp;
        for(int i=0;i<values.length;i++){//这里的values.length表示需要循环的次数
            //定义一个布尔类型的变量,标记数组是否已到达有序状态;
            boolean flag = true;
            //内循环,每一趟循环都从数列的前两个元素开始进行比较,比较到无序数组的最后;
            for (int j=0; j<values.length-1-i;j++){//这里的values.length-1-i是因为外层循环每进行一趟,数组末尾就排序好一个元素,就不需要再多一次比较。
                //如果前一个元素大于后一个元素,则交换两元素的值;
                if (values[j] > values[j+1]){
                    temp = values[j];
                    values[j] = values[j+1];
                    values[j+1] = temp;
                    //本趟发生了交换,表明该数组在本趟处于无序状态,需要继续比较;
                    flag = false;
                }
            }
            //根据标记量的值判断数组是否有序,如果有序,则退出,无序,则继续循环;
            if (flag){
                break;
            }
            System.out.println((i+1)+"趟排序:"+ Arrays.toString(values));
        }
    }
}
相关文章
|
2月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
22 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
2月前
|
算法 搜索推荐 Java
算法实战:手写归并排序,让复杂排序变简单!
归并排序是一种基于“分治法”的经典算法,通过递归分割和合并数组,实现O(n log n)的高效排序。本文将通过Java手写代码,详细讲解归并排序的原理及实现,帮助你快速掌握这一实用算法。
38 0
|
2月前
|
搜索推荐 Java
经典排序算法---冒泡排序
这篇文章详细介绍了冒泡排序算法的基本思想、比较轮数和次数,并提供了Java语言实现冒泡排序的代码示例,展示了如何通过相邻元素的比较和交换来达到排序的目的。
经典排序算法---冒泡排序
|
2月前
|
算法 关系型数据库 MySQL
揭秘MySQL中的版本号排序:这个超级算法将颠覆你的排序世界!
【8月更文挑战第8天】在软件开发与数据管理中,正确排序版本号对软件更新及数据分析至关重要。因MySQL默认按字符串排序版本号,可能出现&#39;1.20.0&#39;在&#39;1.10.0&#39;之前的不合理情况。解决办法是将版本号各部分转换为整数后排序。例如,使用`SUBSTRING_INDEX`和`CAST`函数从`software`表的`version`字段提取并转换版本号,再按这些整数排序。这种方法可确保版本号按逻辑正确排序,适用于&#39;major.minor.patch&#39;格式的版本号。对于更复杂格式,需调整处理逻辑。掌握此技巧可有效应对版本号排序需求。
104 3
|
2月前
|
算法 搜索推荐
算法设计 (分治法应用实验报告)基于分治法的合并排序、快速排序、最近对问题
这篇文章是关于分治法应用的实验报告,详细介绍了如何利用分治法实现合并排序和快速排序算法,并探讨了使用分治法解决二维平面上的最近对问题的方法,包括伪代码、源代码实现及时间效率分析,并附有运行结果和小结。
|
2月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
20 0
|
3月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
【7月更文挑战第12天】归并排序是高效稳定的排序算法,采用分治策略。Python 实现包括递归地分割数组及合并已排序部分。示例代码展示了如何将 `[12, 11, 13, 5, 6]` 分割并归并成有序数组 `[5, 6, 11, 12, 13]`。虽然 $O(n log n)$ 时间复杂度优秀,但需额外空间,适合大规模数据排序。对于小规模数据,可考虑其他算法。**
67 4
|
3月前
|
算法 PHP
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
25 1
|
4月前
|
算法 Java 调度
Java数据结构与算法:拓扑排序
Java数据结构与算法:拓扑排序
下一篇
无影云桌面