冒泡排序
所求结果是从左往右是从小到大的排序方式
所谓的冒泡排序就是从最左边开始一直跟下一位进行比较,如果自己比下一位的值要大,那么就交换,否则不动,把最大的冒泡到后面
从左往右开始遍历数组且遍历过程中比较交换最大的位置,让最大的值往右边位置靠,这一操作很像冒泡
平均T(n) = O(n2)
public class OneBubble {
// 注意这里使用static是因为胖纸写的时候为了下面不创建对象而偷懒了
public static void bubbleSort(int[] arr) {
if ((arr.length < 2) || (arr == null)) {
return;
}
// 第一个for循环控制元素,它说明有这么多元素要进行冒泡,但不是它决定是不是要冒泡
for (int i = 0; i < arr.length; i++) {
/**
* 第二个for控制需要比较的元素即决定元素是否要,因为都冒泡到后面了,所以冒泡了i个就减掉i,
*不减i也可以,只是要和已经冒泡了的数进行比较而已;但是由于它们肯定比当前冒泡的数要大,
*所以比较了也没什么意义,因此减i不进行比较。注意这里减1,是因为最后一个不用再冒泡了,
*由后第二位的冒泡可知道它的结果了
*/
for (int j = 0; j < arr.length-1-i; j++) {
// if这里决定是从小到大排序还是从大到小排序
if (arr[j] > arr[j+1]) {
swap(arr,j,j+1);
}
}
}
}
private static void swap(int[] arr,int i,int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void print(int[] arr) {
for (int num : arr) {
System.out.print(num+" ");
}
System.out.println();
System.out.println("-----------------------------------");
}
public static void main(String[] args) {
int[] arr = {2,3,4,8,9,1,5,9,7,3,5};
print(arr);
bubbleSort(arr);
print(arr);
}
}
结果如下
谢谢阅读,如有不对之处请指出!
文尾鸡汤:
渔夫在出海前,不知道鱼在哪里,但是他们依然选择了出行,相信自己能满载而归。这是勇敢,也是自信,如今的世界,不拼何来未来!