排序算法冒泡排序

思路:

1.每一趟,交换相邻两个数,前一个数大的(小的)往后放,一趟下来,最大(小)的数放在了最后。

2.持续进行,直到所有的数都排序完。

3.优化:如果有一趟没有任何交换,说明已经排序完了。

for(int i=0;i<len;i++)

for(int j=0;j<len-i-1;j++):此处-i是因为最后的数已经放好了,-1是因为后面使用了a[j+1]避免越界。

public class BubbleSort {
    @Test
    public void test(){
        int[] a = {1,2,5,8,3,4,6,9,7};
        sort(a);
        System.out.println(Arrays.toString(a));
    }
    public void sort(int[] a){
        // 优化:使用boolean判断是否交换:如果一趟没有交换退出循环
        boolean isChange = false;
        for(int i=0; i<a.length; i++){
            isChange = false;
            for(int j=0; j<a.length-i-1; j++){
                if(a[j]>a[j+1]){
                    a[j+1] += a[j];
                    a[j] = a[j+1]-a[j];
                    a[j+1] -= a[j];
                    isChange = true;
                }
            }
            // 没有改变顺序:退出即可
            if(!isChange){
                break;
            }
        }
    }
}
原文地址:https://www.cnblogs.com/wsZzz1997/p/14731598.html