十大排序算法——冒泡排序

简介: 十大排序算法——冒泡排序

目录

冒泡排序原理

冒泡排序API设计

冒泡排序的代码实现

冒泡排序的时间复杂度分析


冒泡排序原理

①比较相邻的元素,如果前一个元素比后一个元素大,则交换这两个元素的位置

②对每一对相邻的元素循环上面的步骤,最终最后面的元素就是最大值

冒泡排序API设计

image.png

冒泡排序的代码实现

public class Bubble {
    //对数组a进行排序
    public static void sort(Comparable[] a){
        for(int i=a.length-1;i>0;i--){
            for(int j=0;j<i;j++){
                if(greater(a[j],a[j+1])){
                    exchange(a,j,j+1);
                }
            }
        }
    }
    //比较v元素是否大于w元素
    private static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w)>0;
    }
    //数组元素x和y交换位置
    private static void exchange(Comparable[] a,int x,int y){
        Comparable t=a[x];
        a[x]=a[y];
        a[y]=t;
    }
}
//测试代码
 class Test{
    public static void main(String[] args) {
        Integer[] a={4,5,6,3,2,1};
        Bubble.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

测试结果:

image.png

冒泡排序的时间复杂度分析

冒泡排序虽然采用了双层for循环遍历,但是真正完成排序的代码在内循环中,所以主要分析内层循环体的执行次数即可


在最坏的情况下。即数组为{6,5,4,3,2,1}的逆序


元素的比较次数为:(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)*(N-1)/2=N^2/2-N/2;


元素的交换次数为:(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)*(N-1)/2=N^2/2-N/2;


总执行次数为:2*(N^2/2-N/2)=N^2-N;


根据大O推导法则,保留最高阶项,即冒泡排序的时间复杂度为O(N^2)


第二种写法

public class BubbleSort {
    public static int[] bubbleSort(int[] arr, int len) {
        for (int i = 0; i < len; i++) { //确定排序趟数
            for (int j = i + 1; j < len; j++) { //确定比较次数
                if (arr[i] > arr[j]) { //交换
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }
    public static void main(String[] args) {
        int[] arr = {1,28,3,21,11,7,6,18};
        bubbleSort3(arr, arr.length);
        System.out.println(Arrays.toString(arr));
    }
}


相关文章
|
3月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
1月前
|
搜索推荐 Java
经典排序算法---冒泡排序
这篇文章详细介绍了冒泡排序算法的基本思想、比较轮数和次数,并提供了Java语言实现冒泡排序的代码示例,展示了如何通过相邻元素的比较和交换来达到排序的目的。
经典排序算法---冒泡排序
|
2月前
|
算法 PHP
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
22 1
|
3月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
3月前
|
算法 搜索推荐
数据结构与算法-冒泡排序
数据结构与算法-冒泡排序
23 2
|
3月前
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
207 1
|
3月前
|
搜索推荐 算法 大数据
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
|
3月前
|
机器学习/深度学习 搜索推荐 算法
【C/排序算法】:快速排序和冒泡排序
【C/排序算法】:快速排序和冒泡排序
28 0
|
4月前
|
算法
循环嵌套思路详解 | 一个“在盒子里过家家”的算法 -- 以冒泡排序与打印菱形为例(一)
本文介绍了编程中的一种思想,通过菱形打印问题来阐述如何理解和使用循环嵌套。文章提到,初学者在面对循环结构时,可以通过先识别代码块的结束括号来理解整体结构,提高阅读效率。作者提出了“在盒子里过家家”的理解思路,将外层循环看作一个个盒子,内层循环视为盒子里的操作,弱化循环嵌套的概念,强调以盒子为单位思考问题。此外,文章还通过示例解释了内外循环的关系,帮助读者更好地理解循环控制和执行过程。
85 3
|
3月前
|
搜索推荐 算法
排序算法之冒泡排序
排序算法之冒泡排序
23 0