Java之冒泡排序的分析思路+代码

冒泡排序:即将一堆数字从小到大排序

基本思路:对未排序的各元素从头到尾依次比较相邻的两个元素大小关系,若大于则交换位置,经过第一轮比较排序后可得出最大值,然后使用同样的方法把剩下的元素逐个比较即可(可以看出若有n个元素,那么一共要进行n-1轮比较,第m轮要进行n-m次比较)

通过下面的分析我们可以得出最终代码===》

//冒泡排序
public class ArraySort {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = {12,4,1,66,54,6,74,-3};//静态创建一个数组
		System.out.print( "改变前:");
		for (int i : arr) {  //通过增强for循环foreach打印每一个值
			System.out.print(i + ",");
		}
		System.out.print("\n改变后:");
		for (int j = 0; j < arr.length-1; j++) {
			for (int i = 0; i < arr.length-j; i++) {
				if (i < arr.length-1-j) {  //if用来解决第一轮最后一次比较时下标越界的问题
					if(arr[i] > arr[i+1]) {
						int temp = arr[i];//声明一个变量temp作为中间量去实现交换
						arr[i] = arr[i+1];
						arr[i+1] = temp;
					}
				}
			}
		}
		for (int i : arr) {
			System.out.print(i + ",");
		}
	}
}

打印结果:

当然还有更简单的方法:===》利用jdk自带的方法直接调用

//冒泡排序
public class ArraySort {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = {12,4,1,66,54,6,74,-3};//静态创建一个数组
		java.util.Arrays.sort(arr); //调用jdk自带的方法实现排序
		String str = java.util.Arrays.toString(arr);//完美打印数组格式
		System.out.println(str);
	}
}

打印结果:

分析:int[] arr = {12,4,1,66,54,6,74,3};

//第1轮 得到最大的值放到最右边
        //第1轮 第1次 比较第1个元素和第2个元素大小,如果第1个元素大于第2个元素,那么作交换
        if(arr[0] > arr[1]){
            int temp = arr[0];
            arr[0] = arr[1];
            arr[1] = temp;
        }
        //第1轮 第2次 比较第2个元素和第3个元素大小,如果第2个元素大于第3个元素,那么作交换
        if(arr[1] > arr[2]){
            int temp = arr[1];
            arr[1] = arr[2];
            arr[2] = temp;
        }
        //第1轮 第3次 比较第3个元素和第4个元素大小,如果第3个元素大于第4个元素,那么作交换
        if(arr[2] > arr[3]){
            int temp = arr[2];
            arr[2] = arr[3];
            arr[3] = temp;
        }

        .......
        //第1轮 第n次 比较第n个元素和第(n+1)个元素大小,如果第n个元素大于第(n+1)个元素,那么作交换
        if(arr[n-1] > arr[n]){
            int temp = arr[n-1];
            arr[n-1] = arr[n];
            arr[n] = temp;
        }

扫描二维码关注公众号,回复: 2789749 查看本文章

《===优化上面代码得到  计算每一轮===》

       //第1轮              这里第一轮的轮数1+n的值=数组的长度length-1(具体情况具体判断),

                                 比如如果i<n则此时的n=arr.length-1
        for(int i=0;i<=n;i++){
            if(arr[i] > arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        //第2轮 得到剩余最大的值放到剩余位置最右边
        for(int i=0;i<=n-1;i++){
            if(arr[i] > arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        //第3轮 得到剩余最大的值放到剩余位置最右边
        for(int i=0;i<=n-2;i++){
            if(arr[i] > arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }

       ......
        //第n-1轮 得到剩余最大的值放到剩余位置最右边
        for(int i=0;i<=1;i++){
            if(arr[i] > arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }

     //第n轮 得到剩余最大的值放到剩余位置最右边
        for(int i=0;i<=0;i++){
            if(arr[i] > arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_38225558/article/details/81661499