冒泡排序--咕噜咕噜

冒泡排序的基本介绍:

冒泡排序是简单的一种算法,它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果发现逆序则交换。走访元素的工作是重复地进行直到没有相邻元素需要交换,完成排序。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

冒泡排序算法的原理
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序流程图:
冒泡排序--咕噜咕噜_第1张图片

实例分析:
假如原数组中数据顺序为 1 ,4,-8,8,10

第一趟排序:
①: 1 ,4,-8,8,10 //如果相邻的元素逆序,就交换位置 ,1<4不交换
②: 1 ,-8,4,8,10 //4>-8,交换位置
?:1 ,-8,4,8,10 //4<8,不交换位置
④: 1 ,-8,4,8,10 //8<10,不交换位置
第一趟排序过后位置信息为:1 ,-8,4,8,10

第二趟排序:
①: -8,1,4,8,10
②: -8,1,4,8,10
?:-8,1,4,8,10
第二趟排序过后位置信息为:-8,1,4,8,10

第三趟排序:
①: -8,1,4,8,10
②: -8,1,4,8,10
第三趟排序过后位置信息为:-8,1,4,8,10

第四趟排序:
①: -8,1,4,8,10
第四趟排序过后的位置信息为: -8,1,4,8,10

可以得到排序规则为:
1.一共进行数组大小-1次循环
2.每一趟排序的次数在逐渐减小

代码分析:

public class BubbleSort {
    public static void main(String[] args) {
        //演示冒泡排序的过程
        int arr[] = {1 ,4,-8,8,10};
        int temp=0; //临时变量
        for (int j = 0; j arr[j+1]){
                 temp=arr[j];
                 arr[j]=arr[j+1];
                 arr[j+1]=temp;
            }
        }
        System.out.println("第一次排序过后:");
        System.out.println(Arrays.toString(arr));
        //第二趟排序,将第二大的数排在倒数第二位
        for (int j = 0; j arr[j+1]){
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
        System.out.println("第二次排序过后:");
        System.out.println(Arrays.toString(arr));
        //第三趟排序,将第三大的数排在倒数第三位
	for (int j = 0; j arr[j+1]){
	        temp=arr[j];
	        arr[j]=arr[j+1];
	        arr[j+1]=temp;
	    }
	}
	System.out.println("第三次排序过后:");
	System.out.println(Arrays.toString(arr));
	 //第四趟排序,将第四大的数排在倒数第四位
        for (int j = 0; j arr[j+1]){
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
        System.out.println("第四次排序过后:");
        System.out.println(Arrays.toString(arr));
    }
}		

执行结果:
冒泡排序--咕噜咕噜_第2张图片
代码实现:

public class BubbleSort {
    public static void main(String[] args) {
        //演示冒泡排序的过程
        int arr[] = {1 ,4,-8,8,10};
        int temp=0; //临时变量
        for (int i = 0; i arr[j+1]){
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
            System.out.println("第"+(i+1)+"次排序过后:");
            System.out.println(Arrays.toString(arr));
        }
    }
 }

因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,可以在排序过程中设置一个标志,判断是否进行过交换,做一个简单的优化。
代码实现:

public  static void bubbleSort(int[] arr){
    int temp=0; //临时变量
    boolean flag=false;  //标识变量,表示是否交换
    for (int i = 0; i arr[j+1]){
                flag=true;
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
        if(!flag){  //一次交换都没发生
            break;
        }else{   //重置flag,进行下次判断
            flag=false;
        }
    }
}

你可能感兴趣的:(java)