美文网首页
Java基础 浅谈冒泡选择 排序

Java基础 浅谈冒泡选择 排序

作者: 白衬衫少年 | 来源:发表于2017-02-28 20:56 被阅读0次

“简单不先于复杂,而是在复杂之后.” —— Alan Perlis

x.jpg

序言

冒泡排序

冒泡排序是七大排序算法中较为简单的一个,它的时间复杂度为O(n^2),相较于快速排序,它的耗时较长,但是不会带来额外的空间开销(快速排序对栈的需求),因此它适用于数据量较小且对时间要求不高的业务,然而在实际使用过程中,几乎遇不到这种情况,所以冒泡排序极少被使用,但是作为一个基础的入门排序算法,他的算法思想还是十分值得我们去学习的.


这是分割线.jpg

冒泡排序核心思想

冒泡排序的思想十分简单,它是依据气泡在水中不断上浮的灵感设计出来的:每次冒泡排序都是从头到尾,依次将紧挨着的两个数进行比较,如果前者比后者大,就交换两者的位置,否则不操作,直至末尾,比如先判断第一个和第二个的数,如果第一个比第二个大,就将两者交换,再接着判断第二个和第三个,以此类推,这样就达到了将最大的数放在最后面的效果,也就是将最大的数成功放在了它正确的位置上,之后再对前面的序列重复本操作,直到所有数都找到了自己正确的位置为止(正确的位置指的是排序之后它在序列中的位置)。

这是分割线.jpg

简单的例子

例子.png

动画演示

冒泡排序.gif 这是分割线.jpg

代码


        // 冒泡排序
        //定义一个数组 包含n个元素
        int[] arr2 = {5,8,4,2,7};
       
        //定义i用于 外循环的变量
        //外层循环控制值冒泡排序比较的趟数,一共比较 数组长度(arr2.length) - 1 趟
        for (int i = 0; i < arr2.length - 1; i++) {

            //定义j用于内层循环的变量
            //内层循环控制一趟比较的次数,每比较一趟要比上一次比较的次数少1次,因为上一趟比较已经目标元素排在数组的最后一个
            for (int j = 0; j < arr2.length - i - 1; j++) {

                if (arr2[j] > arr2[j + 1]) {

                    int temp = arr2[j];
                    arr2[j] = arr2[j+1];
                    arr2[j+1] = temp;
                    //  每当 当前数组值arr2[j] 大于后面a[j+1]元素的值, 对两个值进行交换,引用间变量temp来实现两个数组值的互换
                }
            }
        }
        for (int i:arr2) {
            System.out.println(i);
        }

这是分割线.jpg

选择排序

选择排序核心思想

首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。具体做法是:选择最小的元素与未排序部分的首部交换,使得序列的前面为有序。

这是分割线.jpg

动画演示

选择排序动画演示.gif 这是分割线.jpg

代码

    int[] arr1 = {5,2,3,6,1};

       // 选择排序
       for (int i = 0; i < arr1.length - 1; i++) {

       //  第i趟 -- a[i]后所有的数据和a[i]比较
           for (int j = i + 1; j < arr1.length; j++)
           {
               //找到a[i] ~ a[length - 1中最小的数与a[i]进行交换
               if (arr1[i] > arr1[j])
               {
                   int temp = arr1[i];
                   arr1[i] = arr1[j];
                   arr1[j] = temp;
               }
           }
       }
        
     // 增强循环 类似于 iOS的 for in遍历
       for (int i:arr1)  {
           System.out.println(i);

       }


这是分割线.jpg

相关文章

  • Java基础 浅谈冒泡选择 排序

    “简单不先于复杂,而是在复杂之后.” —— Alan Perlis 序言 冒泡排序 冒泡排序是七大排序算法中较为简...

  • Java常见排序基础 - 中

    在Java常见排序基础 - 上中主要介绍了冒泡排序、选择排序、插入排序三种基础排序,本篇文章主要介绍的是 快速排序...

  • 冒泡排序 选择排序

    冒泡排序 java 实现 C 实现 选择排序 java 实现 C 实现

  • Java 基础选择排序&冒泡排序

    排序算法就是用来将数组中的元素进行有序的排序的方法,选择排序和冒泡排序很相似下面将展示两种算法的工作原理和应用例子...

  • java 实现排序算法之「选择排序」

    java 实现排序算法系列 继冒泡排序算法之后,选择排序终于和大家见面了。为什么冒泡排序之后要说选择排序呢,是因为...

  • Java基础01 冒泡排序

    冒泡排序 Java中有很多种排序:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、...

  • 常用排序算法的Java实现

    冒泡、插入、选择、归并、快速排序的Java实现

  • Js冒泡排序&选择排序

    title: Js冒泡排序&选择排序date: 2018-05-03 23:00:00tags: 基础排序冒泡法c...

  • Java基础(冒泡排序与选择排序)

    冒泡排序 冒泡排序算法运行起来非常慢,但在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一...

  • 从0开始——排序

    0.排序的复杂度比较 1.冒泡排序 冒泡排序基础版本1 正宗冒泡排序优化版本 2.选择排序 3.插入排序算法 4....

网友评论

      本文标题:Java基础 浅谈冒泡选择 排序

      本文链接:https://www.haomeiwen.com/subject/xggxgttx.html