冒泡排序三种java实现方式及源码

源码

package datastruct;

import java.util.Arrays;

//冒泡排序三种实现方法
public class demo5 {
	static int[] arrays = {2, 5, 1, 3, 4};
	public static void main(String[] args) {
//		bubble1();
//		bubble2();
		bubble3(arrays, 0, arrays.length-1);
		System.out.println(Arrays.toString(arrays));
		
		
		
	}
	public static void bubble1() {
		 int temp;

	        //外层循环是要排序元素的个数
	        for (int i = 0; i < arrays.length - 1 ; i++) {

	            //内层循环是当前元素需要比较的次数,经过排序会将一个最大的放到最后,
	        	//所以要判断接下来需要排序的元素只要用总的元素减去已经排过的i个元素
	            for (int j = 0; j < arrays.length - i - 1; j++) {

	                //前一位与后一位与前一位比较,如果前一位比后一位要大,那么交换
	                if (arrays[j] > arrays[j + 1]) {
	                    temp = arrays[j];
	                    arrays[j] = arrays[j + 1];
	                    arrays[j + 1] = temp;
	                }
	            }
	        }
	}
	
	public static void bubble2() {
		//在示例数组中,由于数组并不是完全无序的,或者叫逆序,所以当进行第二次排序后就已经排序完成了,
		//此后进行的排序都是没有意义的,可以进行优化
		 //装载临时变量
        int temp;

        //记录是否发生了置换, 0 表示没有发生置换、 1 表示发生了置换
        int isChange;

        //外层循环是排序的趟数
        for (int i = 0; i < arrays.length - 1; i++) {

            //每比较一趟就重新初始化为0
            isChange = 0;

            //内层循环是当前趟数需要比较的次数
            for (int j = 0; j < arrays.length - i - 1; j++) {

                //前一位与后一位与前一位比较,如果前一位比后一位要大,那么交换
                if (arrays[j] > arrays[j + 1]) {
                    temp = arrays[j];
                    arrays[j] = arrays[j + 1];
                    arrays[j + 1] = temp;

                    //如果进到这里面了,说明发生置换了
                    isChange = 1;

                }
            }
            //如果比较完一趟没有发生置换,那么说明已经排好序了,不需要再执行下去了
            if (isChange == 0) {
                break;
            }
        }
	}
	
	public static void bubble3(int[] arrays, int L, int R) {
//采用递归加循环的方式,使运算简便而且易于理解
        int temp;

        //如果只有一个元素了,那什么都不用干
        if (L == R)
        	return;

        else {
            for (int i = L; i < R; i++) {
                if (arrays[i] > arrays[i + 1]) {
                    temp = arrays[i];
                    arrays[i] = arrays[i + 1];
                    arrays[i + 1] = temp;
                }
            }

            //第一趟排序后已经将最大值放到数组最后面了

            //接下来是排序"整体"的数据了
            bubble3(arrays, L, R - 1);

        }
    }
}

结果

冒泡排序三种java实现方式及源码_第1张图片

你可能感兴趣的:(算法,数据结构,java,排序算法)