博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java常用算法1——冒泡排序
阅读量:7108 次
发布时间:2019-06-28

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

冒泡排序

时间复杂度:O(n^2)
空间复杂度:O(1),冒泡排序空间效率很高,只需要一个附加程序单元用于交换

思路:

_

对于一组包含n个数据的记录,冒泡排序在最坏的情况下需要进行n-1趟排序

第1趟:依次比较0和1、1和2、2和3...(n-2)和(n-1)索引的元素,如果发现第1个数据大于第2个数据,交换他们

经过第1趟排序,最大的元素排到了最后

第2趟:依次比较0和1、1和2、2和3...(n-3)和(n-3)索引的元素,如果发现第1个数据大于第2个数据,交换他们

经过第2趟排序,第二大的元素排到了倒数第二个位置

...

第n-1趟:比较0和1索引的元素,如果发现第1个数据大于第2个数据,交换他们

经过第n-1趟排序,第二小的元素排到了第二个位置

冒泡排序是稳定的

代码:

public class BubbleSort {        private static final int SIZE = 10;        public static void bubbleSort(int[] nums) {        int temp;        for(int i = 1; i < nums.length; i++) {            for(int j = 0; j < nums.length - i; j++) {                if(nums[j] > nums[j+1]) {                    temp = nums[j];                    nums[j] = nums[j+1];                    nums[j+1] = temp;                }            }            System.out.print("第" + i + "次排序的结果为:");            for(int k = 0; k < nums.length; k++) {                System.out.print("  " + nums[k]);            }            System.out.println();        }    }        /**     * 优化过的冒泡排序     * 上面的方法中,即使n个数本来就是有序的,也会进行(n-1)次排序     * 改进:当数组已经有序后,就中断循环     */    public static void bubbleSortOptimize(int[] nums) {        int temp;        for(int i = 1; i < nums.length; i++) {            boolean flag = true;            for(int j = 0; j < nums.length - i; j++) {                if(nums[j] > nums[j+1]) {                    temp = nums[j];                    nums[j] = nums[j+1];                    nums[j+1] = temp;                    flag = false;                }            }            if(flag) {                // 如果某趟没有交换,说明数组已经有序                break;            }            System.out.print("第" + i + "次排序的结果为:");            System.out.println(Arrays.toString(nums));        }    }        public static void main(String[] args) {        int[] nums = ArraysUtil.makeIntArray(10, 100, SIZE);        System.out.print("排序前的数组为:");        System.out.println(Arrays.toString(nums));//        bubbleSort(nums);        bubbleSortOptimize(nums);        System.out.print("排序后的数组为:");        System.out.println(Arrays.toString(nums));    }}

生产数组的工具类:

import java.util.Random;/** * 操作数组的工具类 */public class ArraysUtil {        private static Random rand = new Random();        /**     * 返回长度为size,并且数组中元素的大小范围为[begin, end)的int数组     */    public static int[] makeIntArray(int begin, int end, int size) {        int[] nums = new int[size];        for(int i = 0; i < size; i++) {            nums[i] = begin + rand.nextInt(end - begin);        }        return nums;    }}

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

你可能感兴趣的文章
suse10安装oracle11g出现的问题解决
查看>>
js与php传递参数
查看>>
[转]DPM2012系列之六:在Win7上安装DPM远程管理控制台
查看>>
MSSQL清理日志
查看>>
Class hierarchy of UIResponder as well as subclasses of UIView and UIControl
查看>>
IntelliJ IDEA + Maven环境编写第一个hadoop程序
查看>>
OpenGL应用函数库介绍
查看>>
常量、枚举
查看>>
条件变量与互斥量
查看>>
Jenkins-Publish HTML reports
查看>>
KVO 键值观察
查看>>
iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
查看>>
Adaptability Is Accessibility
查看>>
HDU_1227_Fast Food_动态规划
查看>>
实验验证redis的快照和AOF
查看>>
临时表的应用
查看>>
码农的福利来了, 编程在线Androd 客户端上线了
查看>>
sys.stdout.write与sys.sterr.write(二)
查看>>
多继承时,多个基类中存在型别相同的虚函数,该怎么做?
查看>>
shell配置,选择,环境变量修改(ORACLE_HOME,ORACLE_SID),无法使用sqlplus
查看>>