【LintCode-463】整数排序(Java实现-冒泡排序优化)

来源:互联网 发布:网络攻击 演示 编辑:程序博客网 时间:2024/05/16 08:23

这里写图片描述
冒泡排序优化方案1:

    public void sortIntegers(int[] A) {        for(int j=0;j<A.length-1;j++){            Boolean state=true;            for(int i=0;i<A.length-1-j;i++){                if(A[i]>A[i+1]){                    int temp=A[i];                    A[i]=A[i+1];                    A[i+1]=temp;                    state=false;                }            }            if(state){                break;            }        }    }

个人解题思路:
加入状态位state,当内部for循环里的 if(A[i]>A[i+1]) 一次也没有满足时,说明已经是有序的序列。

冒泡排序优化方案2:

    public void sortIntegers(int[] A) {        int size=A.length-1,k=0;        for(int j=0;j<A.length-1;j++){            Boolean state=true;            for(int i=0;i<size;i++){                if(A[i]>A[i+1]){                    int temp=A[i];                    A[i]=A[i+1];                    A[i+1]=temp;                    k=i;                    state=false;                }            }            size=k;            if(state){                break;            }        }    }

个人解题思路:
在优化方案1的基础上,对内部for循环继续优化,找出并记录 满足条件(if(A[i]>A[i+1]))最大值i,此处的“i”相当于一条分界线,序号在“i”之后的序列已经处于有序。
下一趟内部循环时的满足条件就为:i<上一步的最大值‘i’;为什么这里不需要用 <= 呢,也是因为if(A[i]>A[i+1])这个筛选条件的原因。

如果您有更好的解法,欢迎您在留言区补充,感谢!!

原创粉丝点击