今日错题
老师的代码:
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
// 0 ~ N-1
// 0 ~ N-2
// 0 ~ N-3
for (int e = arr.length - 1; e > 0; e--) { // 0 ~ e
for (int i = 0; i < e; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
}
我是另一个思路,想让从数组结尾把最小值给冒上去,这样更符合冒泡排序这个名字嘛,然后就出大问题了
public static void BubbleSort(int[] arr){
// Determine whether the arrays length is greater than two
if( arr==null || arr.length<2){
return;
}
for (int i = arr.length - 1 ; i > 0; i--) {
//0~i
for (int j = i - 1; j >= 0 ;j--){
//swap the value
if (arr[j] > arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
结果
???😖
发现错误的时候 觉得自己是个智障啊
我还在想 我这个外循环和老师都一样,内循环改成从结尾开始不是很对吗,呜呜呜呜简直脑袋乔了😓
分析流程!这样的话不就是:
0~N-1 最小值到最前面
0~N-2 最小值到最前面 !!! 发现没有!你最后那个数嘞?不是最大不是最小 你龟儿就不管了???
所以从最后把最小值冒上去这个想法是不错的,但是内外循环都要改一下吧大哥啊,流程应该是:
0~N-1 最小值到最前面
1~N-1 最小值到最前面
……
给自己一个facepunch👊
正确代码:
public static void BubbleSort(int[] arr){
// Determine whether the arrays length is greater than two
if( arr==null || arr.length<2){
return;
}
for (int i = 0 ; i < arr.length - 1; i++) {
//i~N-1:
//0~N-1
//1~N-1
//……
for (int j = arr.length - 2; j > i - 1;j--){
//swap the value
if (arr[j] > arr[j+1]){
swap(arr,j,j+1);
}
}
}
}