冒泡排序
思路:
将数据两两比较(当前位和后一位比较)
如果后一位较大则交换,,依次进行
当比到最后一位时i+1会越界 所以i的范围应为0~最大索引(length-1) -1
public static void main(String[] args) {
int[] arr = { 3, 5, 1, 6, 10, 4, 9, 8, 2, 7 };
// 第一步
// for (int i = 0; i <= arr.length - 1 - 1; i++) {
// i<=arr.length-1-1,换成i<arr.length-1?
// if (arr[i] > arr[i + 1]) {
// 如果前者大,则先把大值保存下来,再进行对换
// int tmp = arr[i]; // tmp 临时存储数据变量;
// arr[i] = arr[i + 1];
// arr[i + 1] = tmp;
// }
// }
// 到此处为第一轮 能到到一个最值,需要循环arr.length-1次 j是循环次数;
// 第二步 初步完善排序 ,外部循环,循环次数(arr.length-1)次
// for (int j = 0; j < arr.length-1; j++) {
// for (int i = 0; i <= arr.length-1-1; i++) {
// if(arr[i]>arr[i+1]){
// int tmp=arr[i];
// arr[i]=arr[i+1];
// arr[i+1]=tmp;
// }
// }
// }
// 第三步 最终版
// 由于在内存进行判断时每次都会判断到最后,但每次执行最后已经判断过得最值不应该连续判断
// 所以每次判断时 应将内部条件 随着外层修改而修改 修改范围应为arr.length-1-1-j(外层循环次数)
// 外层每循环一次就会确定一个最值 那么在内层判断时就可以少判断一个
for (int j = 0; j < arr.length - 1; j++) {
for (int i = 0; i <= arr.length - 1 - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
int tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
动图展示:
结果展示: