// 第一次面试遇到这么简单的问题,可惜自己没有把握住机会,还是要多手撕代码,加油加油!
思路分析:冒泡排序算是排序中最简单的,整个代码不超过30行。
- 由于冒泡排序的规则就是前后两个数字比大小,小的转移到前面,大的放到后面,所以假设数组中第一个是最大的数字,最后一个是最小的数字,由于每轮比较只能移动一位,所以需要比较 (len - 1)轮。所以这里引入一个指针 i 。
- 在每一轮中,每个数都要与它的前后数字进行对比,这里我们引入一个指针 j 用来定位比较的下标,这里用 (1 ~ len-1)会比 (0 ~ len - 2)更加直观,一轮中的每次数字大小比较,判断并调整顺序。
- 这里我们可以引入一个标志位 flag ,用来识别经过一轮的比较后,数字是否有变化,可判别是否已经完成排序。
代码
import java.util.Arrays;
public class BubbleSort {
public static void main (String[] argus) {
int[] nums = {5,4,3,2,1,11,3,13};
BubbleSort m = new BubbleSort();
System.out.println(Arrays.toString(m.bubbleSort(nums)));
}
public int[] bubbleSort (int[] arr) {
// 复制一份,以免破坏原数组
int[] nums = Arrays.copyOf(arr, arr.length);
for (int i = 0; i < nums.length - 1; i++) {
int temp = 0;
boolean flag = true;
// for (int j = 0; j <= nums.length - 2; j++) {
for (int j = 1; j <= nums.length - 1; j++) {
// 判断前一个数比后一个大,则交换位置
if (nums[j - 1] > nums[j]) {
temp = nums[j - 1];
nums[j - 1] = nums[j];
nums[j] = temp;
flag = false;
}
}
if (flag) {
break;
}
}
return nums;
}
}