冒泡排序-详解
冒泡排序是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
冒泡排序使用的是两层循环,外层冒泡轮数,里层依次比较
冒泡排序思路:
1.比较数组中,两个相邻的元素,如果第一个数,比第二个数大,我们就交换他们的位置
2.每一次比较,都是会产生出最大或者最小
3.下一轮可少一次排序
4.依次到结束
public class HelloWorld { public static void main(String []args) { int []arr={9,2,5,1,3,6,7,1}; int []a=Hil(arr); toString(a); } //冒泡排序方法 public static int[] Hil(int []arr){ //定义临时变量用来在循环中交换数组元素中的位置 int tmp=0; boolean fal=false;//定义一个变量,用来减少,无用的循环 //外层循环,判断我们交换完这个数组总共需要走多少次 for(int i=0;i<arr.length-1;i++){//length-1这个-1呢,是为了不让我们的数组溢出 //内层循环,比较两个数,如果第一个数,比第二个数大,则交接位置 for(int j=0;j<arr.length-1-i;j++){//因为我们每一次遍历都会得出一个最大的数字,所以这个数字需要减掉 if(arr[j]>arr[j+1]){//arr[j]:当前的数,arr[j+1]:后一个数,如果当前的数组元素,大于后一个数组元素,那我们就要交换他们的位置 tmp=arr[j+1];//把后一个的数组元素传给临时变量,然后arr[j+1]就空了,这时就可以把当前的数组元素向后位移了 arr[j+1]=arr[j];//把当前数组元素传给后一个数组元素的位置,然后arr[j+1]就空了,再把临时变量传过来就可以了 arr[j]=tmp;//然后再把临时数组元素的值(tmp的原始值为后一位数),传给当前的数组元素,完成数组元素位置交换 fal=true;//每成功循环一次,就把这个fal值变为true,如果数组元素传进来,没有经过排序,那他的值就为false,如果为false也就是没有产生比较的情况下,就表示他并没有乱序也就不需要进行循环,这样就能减少一次循环 } } if(fal=false){//如果等于false就表示此时循环中,没有乱序的情况了,那不用再循环了 //解:132456789,这是一个数组,由小排到大,可以看得出数值5后面的数字我们是不需要比较了,所以这组数据我们只需比较数字5前面的值,就可以了,但是正常情况我们没有设置结束条件,会把九个数对比完, //那们设置完结束条件后,他们的交换方式是这样的 /*1对比3,1小不用交换,132456789,fal置为true 3对比2,3大,交换,123456789,fal置为true 3对比4,3小,不交换,123456789,fal置为false 当fal为false就会进入当前的判断,从而且结束方法 */ break; } } return arr;//完成交换后再把值,返回出去 } //打印数组方法 public static void toString(int []arr){ for(int i=0;i<arr.length;i++){ System.out.print(arr[i]); } } }

浙公网安备 33010602011771号