美文网首页
排序----冒泡排序(java实现)

排序----冒泡排序(java实现)

作者: 燕大虾呀 | 来源:发表于2019-03-08 21:47 被阅读0次

一、算法描述

冒泡排序:比如在一个长度为N的无序数组中,在第一趟从第一个数据开始遍历,遇到比他大的(小的),就交换位置,直到最大的(最小的)排到最后。第二趟找出倒二大的,N-1趟之后,数组有序。

二、算法分析

三种方法实现

1、暴力穷举-------- 没什么好说的

2、比如数组2 1 3 4 5 6 7 8 9,第一轮排序后变为1 2 3 4 5 6 7 8 9,后面所有排序都是白白浪费时间,所以,应该在数组已经有序了就停止排序,而判断的标志就是,某一趟排序没有交换。

3、比如数组6 5 2 3 1 4 7 8 9,第一轮排序后变为5 2 3 1 4 6 7 8 9,按照第前两种排序,第二轮排序将从第一个元素遍历到第n-1个元素,但其实从 ‘‘6‘’ 开始,数组后边已经有序,不需要载排序了,所以我们可以用一个变量记录下最后一个发生交换的位置,下一次遍历到这个数就可以了。

三、算法实现

  • java实现代码:
package sort;

public class BubbleSort{
        
    public static void main(String[] args) {
        int[] arr = {8 , 4, 6, 2, 7, 3, 1, 9 ,5};
        int[] result1 = bubbleSort1(arr);
        show(result1);
        int[] result2 = bubbleSort1(arr);
        show(result2);
        int[] result3 = bubbleSort1(arr);
        show(result3);
    }
    
    
    /**
     *  冒泡排序 从小到大排序 无优化
     * @param arr
     * @return
     */
    public static int[] bubbleSort1(int[] arr) {
        int n = arr.length;//长度
        int temp = 0;//中间变量
        
        for(int i = 0 ; i < n-1 ; i++) {
            for(int j = 0 ; j < n-i-1 ; j++) {
                //如果上边的泡泡更重(值更大),则往下沉(交换)
                if(arr[j]>arr[j+1]) {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        return arr;
    }
    
    /**
     *  冒泡排序 从小到大排序 优化一
     * @param arr
     * @return
     */
    public static int[] bubbleSort2(int[] arr) {
        int n = arr.length;//长度
        int temp = 0;//中间变量
        int count = 0;//计数器
        
        for(int i = 0 ; i < n-1 ; i++) {
            count = 0;//恢复为0
            for(int j = 0 ; j < n-i-1 ; j++) {
                //如果上边的泡泡更重(值更大),则往下沉(交换)
                if(arr[j]>arr[j+1]) {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    count++;//交换次数+1
                }
            }
            if(count == 0) {//此轮排序无交换,数组已经有序
                break;//退出循环
            }
            
        }
        return arr;
    }
    
    /**
     *  冒泡排序 从小到大排序 优化二
     * @param arr
     * @return
     */
    public static int[] bubbleSort3(int[] arr) {
        int n = arr.length;//长度
        int temp = 0;//中间变量
        int count = 0;//计数器
        int k = n-1;//记录最后一次交换的位置,其后已经有序,初始值为n-1
        int flag = 0;
        
        for(int i = 0 ; i < n-1 ; i++) {
            count = 0;//恢复为0
            k = flag;
            for(int j = 0 ; j < k ; j++) {
                //如果上边的泡泡更重(值更大),则往下沉(交换)
                if(arr[j]>arr[j+1]) {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    count++;//交换次数+1
                    flag = j+1;
                }
            }
            if(count == 0) {//此轮排序无交换,数组已经有序
                break;//退出循环
            }
            
        }
        return arr;
    }
    
    
    public static void show(int[] result) {
        for(int i = 0 ; i < result.length ; i++) {
            System.out.print(result[i]+" ");
        }
        System.out.println();
    }
}

所有内容均个人编辑,如有错误,欢迎指正!

相关文章

  • 冒泡排序 选择排序

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

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • Java 实现冒泡排序

    本文介绍冒泡排序原理及 Java 语言实现。 目录 冒泡排序原理 代码实现 冒泡排序原理 比较相邻的元素,升序时如...

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

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

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

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 排序算法Java实现

    本文会通过Java语言实现:冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序,希尔排序...

  • 实现几种常见排序方法

    Java实现几种常见排序方法 日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还...

  • 排序算法的实现

    用java对常用内部排序算法的实现。 对冒泡排序,简单选择排序,直接插入排序,希尔排序,归并排序的简单实现(缺少快...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

网友评论

      本文标题:排序----冒泡排序(java实现)

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