文档章节

冒泡排序

datacube
 datacube
发布于 2016/08/05 16:44
字数 511
阅读 6
收藏 0

基本思想:

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

package com.lifeibigdata.algorithms.sort;

/**
 * Created by lifei on 16/8/5.
 */
public class BubbleSort {
    public static void main(String[] args) {//TODO 可以向前移动,也可以向后移动
        int[] nums = {7,6,3,4,5};
//        ascSord(nums);
//        descSord(nums);
//        optimizeSort(nums);
        optimizeSort2(nums);

    }

    static void ascSord(int[] nums){
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = 0; j < nums.length - i - 1; j++) {
                if (nums[j] > nums[j+1]){
                    int tmp = nums[j+1];
                    nums[j+1] = nums[j];
                    nums[j] = tmp;
                }
            }
            for (int x:nums) {
                System.out.print(x+"\t");
            }
            System.out.println();
        }
    }
    static void descSord(int[] nums){
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = 0; j < nums.length - i - 1; j++) {
                if (nums[j] < nums[j+1]){
                    int tmp = nums[j+1];
                    nums[j+1] = nums[j];
                    nums[j] = tmp;
                }
            }
            for (int x:nums) {
                System.out.print(x+"\t");
            }
            System.out.println();
        }
    }

    public static void optimizeSort(int[] nums){   //7,6,3,4,5
        boolean isChanged;
        // 要遍历的次数
        for (int i = 0; i < nums.length - 1; i++) {
            isChanged = false;
            //从前向后依次的比较相邻两个数的大小,遍历一次后,把数组中第i大的数放在第i个位置上
            for (int j = 0; j < nums.length-i-1; j++) {
                if (nums[j]>nums[j+1]) {//比较相邻的元素,如果前面的数大于后面的数,则交换
                    int temp = nums[j+1];
                    nums[j+1]=nums[j];
                    nums[j]=temp;
                    isChanged = true;
                }
            }
            //若没有移动,说明序列已经有序,跳出循环
            if (!isChanged) {
                break;
            }
            for (int x:nums) {
                System.out.print(x+"\t");
            }
            System.out.println();
        }
    }


    public static void optimizeSort2(int[] nums){   //todo 此方法不是两两比较,而是都和某个元素比较
        boolean isChanged;
        for (int i = 0; i < nums.length - 1; i++) {
            isChanged = false;
            //若发现较大元素,则往后移
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i]>nums[j]) {//前面的数,大于后面的数
                    int temp = nums[j];
                    nums[j]=nums[i];
                    nums[i]=temp;
                    isChanged = true;
                }
            }
            //若没有移动,说明序列已经有序,跳出循环
            if (!isChanged) {
                break;
            }
            for (int x:nums) {
                System.out.print(x+"\t");
            }
            System.out.println();
        }
    }
}

© 著作权归作者所有

上一篇: 堆和树的区别
下一篇: 257. Binary Tree Paths
datacube
粉丝 9
博文 607
码字总数 152394
作品 0
海淀
程序员
私信 提问

暂无文章

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部