算法提炼--冒泡排序的理解(12.4)

简介: 算法提炼--冒泡排序的理解(12.4)

冒泡排序

冒牌排序有三种常见的书写方法,这里介绍第一种和第三种(第二种方法的提炼和修改)

冒泡排序中用到了值交换,这里建议以后都是用位运算来实现值交换,不懂的自己可以去搜百度为什么这样可以实现值交换

 public static void swap(int a[],int c,int d){
        a[c] = a[c]^a[d];
        a[d]= a[c]^a[d];
        a[c]=a[c]^a[d];
    }


冒泡排序第一种是最常见的方法:时间复杂度为o(n^2)

int c [] = {1,5,6,8,7,6,3,1};
        for(int i =0;i<c.length-1;i++){
            for (int j = 0;j<c.length-1-i;j++){
                swap(c,j,j+1);
            }
        }


冒泡排序第三种方法优化了时间复杂度,最大可优化为o(n)

int c [] = {1,5,6,8,7,6,3,1};
        boolean swapped =true;
        int index = c.length-1;
        int indexlast = -1;
        while(swapped){
            swapped = false;
            for (int i = 0;i< index;i++){
                if(c[i]>c[i+1]){
                    swap(c,i,i+1);
                }
                swapped = true;
                indexlast = i;
            }
            index = indexlast;
        }


相关文章
|
6天前
|
搜索推荐 算法 Python
python实现冒泡排序算法
python实现冒泡排序算法
27 0
|
6天前
|
机器学习/深度学习 存储 算法
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
|
6天前
|
搜索推荐 算法 C#
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
58 1
|
6天前
|
搜索推荐 算法 Java
sort-01-bubble sort 冒泡排序算法详解
这是一个关于排序算法的系列文章摘要。作者整理了10种不同的排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。文章详细介绍了冒泡排序的工作原理、流程,并提供了代码实现,强调了在实现中考虑的改进点,如统一接口、实用性增强和日志输出。此外,还提供了一个排序接口和工具类以方便使用,并通过测试代码和日志展示了排序过程。整个系列旨在帮助读者理解和掌握排序算法。相关代码已开源在GitHub。
|
6天前
|
存储 算法 搜索推荐
【数据结构与算法】归并排序(详解:递归与非递归的归并排序 | 赠:冒泡排序和选择排序)
【数据结构与算法】归并排序(详解:递归与非递归的归并排序 | 赠:冒泡排序和选择排序)
|
6天前
|
搜索推荐 算法 Java
Java基础(冒泡排序算法)
Java基础(冒泡排序算法)
20 3
|
6天前
|
搜索推荐 算法 C语言
C语言实现冒泡排序算法
C语言实现冒泡排序算法
23 0
|
6天前
|
搜索推荐 C#
C#实现冒泡排序算法
C#实现冒泡排序算法
21 0
|
6天前
|
搜索推荐 Python
Python 实现冒泡排序算法
Python 实现冒泡排序算法
11 0
|
6天前
|
搜索推荐 算法
在冒泡排序算法中,为什么每次比较相邻的元素时都要进行交换?
【2月更文挑战第8天】【2月更文挑战第21篇】在冒泡排序算法中,为什么每次比较相邻的元素时都要进行交换?