冒泡排序是一种比较排序,下面我实现一个从小到大的冒泡排序:
先定义两个变量:
待排序数组:int[] source;
数组长度 length = source.length;
原理如下:
1、开始:有length-1次循环,每次参与循环的是未排序的数。第一次参与循环的是整个数组,因为假设整个数组是无序的。
每次循环需要设置一个标志位: boolean flag = false;表示循环过程中是否产生了交换。
2、过程:循环过程中, 相邻的两个元素进行比较,如果source[j] > source[j+1],则交换两者顺序,同时标志位flag = true;表示产生了交换。每一次循环结束后,最大数沉到未排序部分的尾部,每次循环找出一个最大数。
3、结束:每次循环结束后,如果标志位flag未改变的话,证明未排序的部分中没有source[j] > source[j+1],即未排序部分已经有序,这时,跳出循环,排序结束。
或者length-1次循环结束后,数组有序。
为什么是length-1次而不是length循环,因为每次循环找出一个最大数,沉下去,length-1次循环后,只剩下一个元素,不需要进行任何比较,它就是最小的。
JAVA代码如下: