算法:冒泡排序

冒泡排序的学习

第一节 冒泡排序


文章目录

  • 冒泡排序的学习
  • 一、冒泡排序的思想
  • 二、冒泡排序的思路
  • 三、冒泡排序的实现


一、冒泡排序的思想

冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。

二、冒泡排序的思路

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数;
  3. 排除最大的数,接着下一轮继续相同的操作,确定第二大的数…
  4. 重复步骤1-3,直到排序完成。

动画演示如下:

在这里插入图片描述

资料来源:https://zhuanlan.zhihu.com/p/252631515

三、冒泡排序的实现

代码如下:

java">//冒泡排序
/*
平均时间复杂度:O(n²)
空间复杂度:O(1)
算法稳定性:稳定
*/
//一边比较一边向后两两交换,将最大值 / 最小值冒泡到最后一位;
public class BubbleSort1 {
    public static void main(String[] args) {
        int[] arr = {3,1,4,2,5,7};
        bubbleSort1(arr);
        //遍历输出结果
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    public static void bubbleSort1(int[] arr){
        //如果数组为null或者长度小于2,则无需比较,直接返回
        if (arr == null || arr.length < 2){
            return;
        }
        //冒泡排序的核心是比较旁边两个的数,如果左边大于右边的,那么就会交换的右边
        //如此反复,一圈下来,最大的数就会跑到最右边。
        //最外层的for循环代表的就是这个思想,所以他会有arr.length-1次循环次数
        for (int i = 0;i < arr.length - 1;i++){
            //内层for循环代表的是在减去已经排好序的个数i,然后再减去1,就可以实现冒泡排序了
            //至于为什么要减1,你可以简单的尝试一下,有5个数的话,他们俩俩比较需要几次?
            //没错,只需要4次就可以!
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}

http://www.niftyadmin.cn/n/812495.html

相关文章

iOS开发中的单元测试(三)——URLManager中的测试用例解析

本文转载至 http://www.cocoachina.com/cms/plus/view.php?aid8088 此前&#xff0c;我们在《iOS开发中的单元测试&#xff08;一&#xff09;&&#xff08;二&#xff09;》中介绍了从使用者的角度对比当下比较流行的两款单元测试框架OCUnit和GHUnit&#xff0c;这篇文章…

IOS之禁用UIWebView的默认交互行为

本文转载至 http://my.oschina.net/hmj/blog/111344 UIKit提供UIWebView组件&#xff0c;允许开发者在App中嵌入Web页面。通过UIWebView组件&#xff0c;我们可以在应用中很方便的嵌入HTML页面。在利用IOS原生的组件进行界面开发时&#xff0c;界面UI元素的布局需要我们去一点点…

VUE基础回顾1

1.v-if和v-show   v-if 和v-show都可以显示和隐藏元素&#xff1b;  区别&#xff1a;&#xff08;1&#xff09;v-if初始值为false那么这个元素不会被渲染 &#xff0c;v-show不管初始值为何值都会被渲染     &#xff08;2&#xff09;v-if是控制DOM元素是否插入&…

算法:快速排序之双边循环法(一)

算法&#xff1a;快速排序的学习&#xff08;一&#xff09; 第二节 快速排序 文章目录算法&#xff1a;快速排序的学习&#xff08;一&#xff09;前言一、初识快速排序二、快速排序的思想三、快速排序的实现&#xff08;双边循环法&#xff09;四、快速排序的实现&#xff0…

京东商城总架构师刘海锋:世界上本没有架构,建设的需求多了便有了架构

架构这个词&#xff0c;源于建筑学&#xff0c;它基本的架构是建设的方法&#xff0c;怎么样盖这个楼&#xff0c;就是整个实施的过程都需要架构。后来有了IT&#xff0c;有了互联网&#xff0c;最后就有了做软件需要架构&#xff0c;做硬件需要架构&#xff0c;需要设计一些东…

[深入浅出Cocoa]iOS程序性能优化

本文转载至 http://blog.csdn.net/kesalin/article/details/8762032 [深入浅出Cocoa]iOS程序性能优化罗朝辉 (http://blog.csdn.net/kesalin)CC 许可&#xff0c;转载请注明出处iOS应用是非常注重用户体验的&#xff0c;不光是要求界面设计合理美观&#xff0c;也要求各种UI的反…

CSS设置文本的水平对齐方向

介绍#在CSS中text-align属性有3种值&#xff0c;如下&#xff1a;left左、center中、right右。 直接进入text-align属性实践&#xff0c;如果大家是新手自己一定要去实践哈。左代码块 <!DOCTYPE html> <html lang"en"><head><meta charset&quo…

算法:快速排序之单边循环法(二)

算法&#xff1a;快速排序的学习&#xff08;二&#xff09; 第二节 快速排序 文章目录算法&#xff1a;快速排序的学习&#xff08;二&#xff09;前言一、快速排序的实现&#xff08;单边循环法&#xff09;前言 算法对于一个程序员来说可以是一门必修课&#xff0c;基础的…