冒泡排序

1:概念

  就是对待排序的序列,从前往后的依次比较相邻的数据之间的大小关系,如果满足排序则交换位置,这样子每一次排序就找到当前的最大值放在最边上!优化设计:若有一次排序中,没有任何数据进行交换!则可以设置标志位,代码此序列已经是有序的了,不用再继续比较,从而进行优化!

 

2:设计思想

经过冒泡算法的定义,可以知道我们通过一次外循环和一次内循环可以构建算法复杂度为O(n^2)的算法来实现冒泡算法。

内循环从0开始进行相邻的数据数据的判断,然后如果满足大小顺序,则交换,外循环变量控制内循环的循环次数即范围。

同时增加了,判断序列是否已经是有序的标志位flag,即当内循环在一次循环后,若没有数据进行交换,意味着所有数据已经是有序的了!

package sort;

public class BubbleSortTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = new int[] {
                3,4,51,2,3,44,213,12,51,99,2
        };
        
        System.out.println("排序前的序列:");
        for(int i:array) {
        System.out.print(i+" ");
        }
        
        BubbleSort bs = new BubbleSort(array);
        bs.startSort();
        System.out.println("");
        System.out.println("排序后的序列:");
        for(int i:array) {
        System.out.print(i+" ");
        }
    }

}

//冒泡排序算法
class BubbleSort{
    //时间复杂度为O(n^2)
    private int temp ;//定义变量temp,用来交换中的缓存数据
    private boolean flag;//是否进行过交换的标志?false代表没有交换过,true则代表交换过
    private int[] array;//待排序的数组
    private int length;//待排序的数组长度
    
    
    public BubbleSort(int[] a) {
        this.array = a;
        this.temp = 0;
        this.flag = false;
        this.length = array.length;
    }
    //冒泡排序
    //若一次循环后,没有数据交换过,即flag始终为false,则说明上一次的循环,没有数据交换过,则意味着已经是有序得了!
    public void startSort() {
        for(int i=0;i<this.length-1;i++) {
            for(int j=0;j<this.length-i-1;j++) {
                if(this.array[j]>this.array[j+1]) {//如果第i个数大于i+1的数,则交换
                    this.temp = this.array[j];
                    this.array[j] = this.array[j+1];
                    this.array[j+1] = this.temp;
                    this.flag = true;//代表着序列已经交换过!
                }
            }
            if(this.flag == false) {//经过一次排序后,没有数据交换,则意味着,数据已经是有序的了,直接退出即可!
                break;
            }
            else {
                this.flag = false;//至false,为下一次循环准备。
            }
        }
    }
}

 

posted @ 2020-02-22 12:17  大朱123  阅读(146)  评论(0)    收藏  举报