冒泡排序--Bubble sort

原理

临近的数字两两进行比较,按照从小到大(或者从大到小)的顺序进行交换,

这样一趟过去后,最大(或最小)的数字被交换到了最后一位,

然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子。

算法的关键是,循环几趟,每趟比较几次

例子

从小到大排序

原始待排序数组| 7 | 3 | 2 | 1 | 4 | 9 |

第一趟排序(外循环)

第一次两两比较7 > 3交换(内循环)

交换前状态| 7 | 3 | 2 | 1 | 4 | 9 |

扫描二维码关注公众号,回复: 3379917 查看本文章

交换后状态| 3 | 7 | 2 | 1 | 4 | 9 |

第二次两两比较,7 > 2交换

交换前状态| 3 | 7 | 2 | 1 | 4 | 9 |

交换后状态| 3 | 2 | 7 | 1 | 4 | 9 |

第三次两两比较,7 > 1交换

交换前状态| 3 | 2 | 7 | 1 | 4 | 9 |

交换后状态| 3 | 2 | 1 | 7 | 4 | 9 |

第四次两两比较,7 > 4交换

交换前状态| 3 | 2 | 1 | 7 | 4 | 9 |

交换后状态| 3 | 2 | 1 | 4 | 7 | 9 |

第五次两两比较,7 < 9不交换

交换前状态| 3 | 2 | 1 | 4 | 7 | 9 |

交换后状态| 3 | 2 | 1 | 4 | 7 | 9 |

第二趟排序(外循环)

第一次两两比较3 > 2交换

交换前状态| 3 | 2 | 1 | 4 | 7 | 9 |

交换后状态| 2 | 3 | 1 | 4 | 7 | 9 |

第二次两两比较,3 > 1交换

交换前状态| 2 | 3 | 1 | 4 | 7 | 9 |
交换后状态| 2 | 1 | 3 | 4 | 7 | 9 |

第三次两两比较,3 < 4不交换

交换前状态| 2 | 1 | 3 | 4 | 7 | 9 |
交换后状态| 2 | 1 | 3 | 4 | 7 | 9 |

第四次两两比较,4 < 7不交换

交换前状态| 2 | 1 | 3 | 4 | 7 | 9 |

交换后状态| 2 | 1 | 3 | 4 | 7 | 9 |

第三趟排序(外循环)

第一次两两比较2 > 1交换

交换后状态| 2 | 1 | 3 | 4 | 7 | 9 |

交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |

第二次两两比较,2 < 3不交换

交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |
交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |

第三次两两比较,3 < 4不交换

交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |
交换后状态| 1 | 2 | 3 | 4 | 7 | 9 |

第四趟排序(外循环)无交换

第五趟排序(外循环)无交换

排序完毕,输出最终结果| 1 | 2 | 3 | 4 | 7 | 9 |

参考代码

/**
 * @Description:冒泡排序算法实现
 */
public class BubbleSort {

    public static void bubbleSort(int[] arr) {
        if (arr == null || arr.length == 0)
            return;
        //冒泡排序是通过相邻的比较和交换
        //算法的关键是,循环几趟,每趟比较几次
        for (int i = 0; i < arr.length - 1; i++) {
            System.out.println("i======"+i);
            for (int j = arr.length - 1; j > i; j--) {
                System.out.println("j======"+j);
                if (arr[j] < arr[j - 1]) {
                    swap(arr, j - 1, j);
                }
            }
        }
        System.out.println("结果为==========================");
        for (int i : arr) {
            System.out.println(i);
        }
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    public static void main(String[] args) {
        int[] arr = {4,5,2,1,5,4};
        new BubbleSort().bubbleSort(arr);
    }
}

猜你喜欢

转载自www.cnblogs.com/llq1214/p/9714427.html