冒泡排序算法

    xiaoxiao2021-12-10  7

    冒泡排序是一种交换排序

    什么是交换排序呢?

    交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。

    假设有一个无序序列  { 4. 3. 1. 2, 5 }

    第一趟排序:通过两两比较,找到第一小的数值 1 ,将其放在序列的第一位。

    第二趟排序:通过两两比较,找到第二小的数值 2 ,将其放在序列的第二位。

    第三趟排序:通过两两比较,找到第三小的数值 3 ,将其放在序列的第三位。

    至此,所有元素已经有序,排序结束。 

     

    要将以上流程转化为代码,我们需要像机器一样去思考,不然编译器可看不懂。

    假设要对一个大小为 N 的无序序列进行升序排序(即从小到大)。 

    (1) 每趟排序过程中需要通过比较找到第 i 个小的元素。

    所以,我们需要一个外部循环,从数组首端(下标 0) 开始,一直扫描到倒数第二个元素(即下标 N - 2) ,剩下最后一个元素,必然为最大。

    (2) 假设是第 i 趟排序,可知,前 i-1 个元素已经有序。现在要找第 i 个元素,只需从数组末端开始,扫描到第 i 个元素,将它们两两比较即可。

    所以,需要一个内部循环,从数组末端开始(下标 N - 1),扫描到 (下标 i + 1)。

    从前向后的算法:两两相比,把大的数往后放,首次确定最大的数

    int [] array = new int [*] ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array[i]) { temp = array[i] ; array[i] = array[j] ; array[j] = temp ; } } }

    从后向前的算法:两两相比,把最小的数往前放,首次确定最小的数

     int temp = 0; // 用来交换的临时数     // 要遍历的次数     for (int i = 0; i < list.length - 1; i++) {         // 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上         for (int j = list.length - 1; j > i; j--) {             // 比较相邻的元素,如果前面的数大于后面的数,则交换             if (list[j - 1] > list[j]) {                 temp = list[j - 1];                 list[j - 1] = list[j];                 list[j] = temp;             }         }

    转载请注明原文地址: https://ju.6miu.com/read-700097.html

    最新回复(0)