java复习第四天(二)之[冒号排序优化]

java复习第四天(二)之[冒号排序优化],第1张

java复习第四天(二)之[冒号排序优化]

冒号排序:

简介:冒号排序是经典的排序算法,几乎在java星球中人尽皆知,所以来复习一下这个简单的经典算法。

首先我们要了解什么是冒号排序呢?冒号排序就是使一个混乱的数字重新从小到大依次排序,或者从大到小依次排序比如我有一个数组为[7,2,1,8,6,9,3,4,5]使这个数组变成[1,2,3,4,5,6,7,8,9]该怎么做呢?

首先要解决的核心难点:比较数组中两个元素,如果第一个元素比第二个元素大,则两者交换.

比如,如果有一瓶可乐和雪碧,要使他们的饮料相互交换这时就需要一个容器来接受交换时的饮料

如图:

如果用代码的方式就是这样的:

import java.util.Arrays;

public class px {
    public static void main(String[] args) {
        int[] a =new int[]{7,2,1,8,6,9,3,4,5};
        Test(a);
        System.out.println(Arrays.toString(a));
    }

    //排序
    public static int[] Test(int[] a){
        //临时变量
        int temp;
        //外层循环是总共循环次数,-1是为了防止下标越界
        for (int i = 0; i 

 冒号排序优化:

优化版的冒号排序相比于原来的则多了一个记录循环一趟下来是否交换位置如果没有则代表已经排序完成则退出循环,减少循环次数,代码如下:

import java.util.Arrays;

public class px {
    public static void main(String[] args) {
        int[] a = new int[]{7, 2, 1, 8, 6, 9, 3, 4, 5};
        Test(a);
        System.out.println(Arrays.toString(a));
    }

    //排序
    public static int[] Test(int[] a) {
        //临时变量
        int temp;
        //外层循环是总共循环次数,-1是为了防止下标越界
        for (int i = 0; i < a.length - 1; i++) {
            //判断是否需要接着循环
            boolean flag = false;
            //内存循环判元素大小,-1是为了防止下标越界,-i是没排除一个则第二次可以少判断一次
            for (int j = 0; j < a.length - 1 - i; j++) {
                //判断是否要交换
                if (a[j + 1] < a[j]) {
                    //两两相交
                    temp = a[j + 1];
                    a[j + 1] = a[j];
                    a[j] = temp;
                    //交换记录
                    flag=true;
                }
                //判断是否需要退出循环
                if (flag==false){
                    break;
                }
            }
        }
        return a;
    }
}

总之呢还是要熟悉冒泡排序的逻辑,这样才能有更深的理解。 

创作难免有错误和不当的地方,还请大家多多指教。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5707977.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存