package com.arraypro.array; import java.util.Arrays; public class TestBubble01 { public static void main(String[] args) { int[] values = {3,1,8,4,7,2,6,9,5}; bubbleSort(values); System.out.println(Arrays.toString(values)); } public static void bubbleSort(int[] values){ /** * 就以3,1,8,4,7,2,6,9,5来说 这个使用冒泡排序,冒泡排序内层循环要比外层循环少一次, * i是外层循环次数 每完成一次循环, i自增1 array.length是数组的长度,数组中有9个数字 那么长度array.length就是9 * 首先进行第一次外循环,i自增1,此时的内循环(一次换位为一次内循环)如下:1比3小,1和3换位,结果1,3,8,4,7,2,6,9,5,然后3和8对比 换位1,3,8,4,7,2,6,9,5 * 以此类推,此次内循环总共换位8次(length-1即9-1),换位结束时9在最后,第一次外循环对应的内循环结束,进行第二次外循环。 * 进行第二次循环 我们要先清楚 i现在的值是1,我们的数组中2 的位置已经定下不用再将拉入内循环对比大小换位,所以内层循环次数要比第一次少一次,所以要减1,即array.length-1-1 * 进行第三次循环 我们要先清楚 i现在的值是2,我们的数组中2 5的位置已经定下不用再将拉入内循环对比大小换位,所以内层循环次数要比第二次少一次,所以要减2,array.length-1-2; */ int temp; int i; //外层循环:n个元素排序,则至多需要n-1趟循环 for(i=0;i<values.length;i++){ //定义一个布尔类型的变量,标记数组是否已达到有序状态 boolean flag = true; /** * 内层循环,每一趟循环都从数列的前两个元素进行比较,比较到无序的数组的最后 */ for(int j=0;j<values.length-1-i;j++){ //如果前一个元素大于后一个元素,则交换两元素的值; if (values[j]>values[j+1]){ /** * tem相当于引入的中间变量,排序的交换过程实际上数组中数的换位置 *起初,value[j]=3,把3给了temp; * value[j+1]=1,把1给了value[j]; * temp=3,把3给了value[j+1] * 数组中的值比较后交换完毕, */ temp = values[j]; values[j] = values[j+1]; values[j+1] = temp; //本趟发生了交换,表明噶Isuzu再本趟处于无序状态,需要继续比较 flag = false; } } //根基标记量的值判断数组是否有序,如果有序,则退出,无序,则继续循环 if (flag){ break; } } } }
冒泡排序优化算法
最新推荐文章于 2022-12-26 11:01:29 发布