博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序
阅读量:2168 次
发布时间:2019-05-01

本文共 2345 字,大约阅读时间需要 7 分钟。

  算法思路:从第一个元素开始,依次比较相邻的两个元素,如果前面的元素大于后面的元素,则交换他们的次序,一趟下来最大的元素的位置就确定了,依次类推,第二趟的时候就确定了第二大元素的位置,进行n-1躺就能确定所有元素的位置。

  性能分析:

    空间复杂度O(1)

    时间复杂度最好O(n),最坏、平均O(n^2)

    稳定性: 算法稳定

public static void bubbleSort(int[] arrays) {        for (int i = arrays.length - 1; i > 0; i--) {            boolean flag = false;            for (int j = 0; j < i; j++) {                if (arrays[j] > arrays[j+1]){                    int temp = arrays[j];                    arrays[j] = arrays[j+1];                    arrays[j+1] = temp;                    flag = true;                }            }            if (!flag)  //如果某一趟冒泡没有发生交换,则表示序列已经有序                break;        }    }
private static void bubbleSort(int[] arrays) {        for (int i = 0; i < arrays.length; i++) {            for (int i1 = 0; i1 < arrays.length - 1 - i; i1++) {                if (arrays[i1] > arrays[i1 + 1]) {                    arrays[i1] ^= arrays[i1 + 1];                    arrays[i1 + 1] ^= arrays[i1];                    arrays[i1] ^= arrays[i1 + 1];                }            }        }    }

完整代码: 

package sort;import java.util.Arrays;import java.util.Scanner;/** * 冒泡排序 */public class BigData02 {    public static void main(String[] args) {        int[] arrays = input();        bubbleSort(arrays);        print(arrays);    }    /**     * 打印数组     * @param arrays     */    private static void print(int[] arrays) {        System.out.print("升序后的数组为: ");        System.out.println(Arrays.toString(arrays));    }    /**     * 冒泡排序核心功能     * @param arrays     */    public static void bubbleSort(int[] arrays) {        for (int i = arrays.length - 1; i > 0; i--) {            boolean flag = false;            for (int j = 0; j < i; j++) {                if (arrays[j] > arrays[j+1]){                    int temp = arrays[j];                    arrays[j] = arrays[j+1];                    arrays[j+1] = temp;                    flag = true;                }            }            if (!flag)  //如果某一趟冒泡没有发生交换,则表示序列已经有序                break;        }    }    /**     * 输入多个值     * @return     */    public static int[] input() {        Scanner scanner = new Scanner(System.in);        System.out.print("请依次输入6个数: ");        int[] arrays = new int[6];        for (int i = 0; i < arrays.length; i++) {            arrays[i] = scanner.nextInt();        }        return arrays;    }}

 

转载地址:http://lpczb.baihongyu.com/

你可能感兴趣的文章
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
如何应用 BERT :Bidirectional Encoder Representations from Transformers
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
强化学习第1课:像学自行车一样的强化学习
查看>>
强化学习第2课:强化学习,监督式学习,非监督式学习的区别
查看>>
强化学习第3课:有些问题就像个赌局
查看>>
强化学习第4课:这些都可以抽象为一个决策过程
查看>>
强化学习第5课:什么是马尔科夫决策过程
查看>>
强化学习第6课:什么是 Crossentropy 方法
查看>>
强化学习第7课:交叉熵方法的一些局限性
查看>>
强化学习 8: approximate reinforcement learning
查看>>