2022更文挑战24-冒泡排序

138 阅读2分钟

「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战」。

冒泡排序

前文

本文为对于冒泡排序相关知识的一些个人理解及总结,如果内容中出现一些不准确或错误之处,还请见谅。

冒泡排序

说起冒泡排序,想必几乎所有学习编程的人都能说出一二,这可能是百分之九十九的人所接触的第一个排序算法。因此,冒泡排序相比其他的桶排序、堆排序等复杂的排序算法来说,自然是最容易理解的一种。但也正是因此,它也具有比较差的执行效率,复杂度与执行效率一般意义上来说是呈现反比。

至于冒泡排序的具体算法,是对于给定的待排序队列进行冒泡处理,也就是将最大或最小的值冒泡出来,放在队列末尾。实际的操作方法需要通过对于待排序队列进行遍历,在遍历的过程中,比较相邻的两个元素,将其中较大或较小的数值向后移动。这样当所有数据都遍历完成后,队列的排序工作也就完成。而在比较的过程中,需要进行二层循环处理,才能确保在当前位置,已经将最大或最小的元素移动到队列末尾。

public void sort(int[] list){
    int temp;
    for(int i = 0;i < list.length - 1;i++){
        for(j = i + 1;j < list.length;j++){
            if(list[j] > list[i]){
                temp = list[i];
                list[i] = list[j];
                list[j] = temp;
            }
        }
    }
}

如上所示为一段冒泡排序代码,可以看到在循环的过程中,如果遇到元素比当前元素大时,需要将二者进行位置的替换。冒泡排序最大元素向后移动的方式可以让我们很容易联想到选择排序向前移动的方式。而选择排序不需要将所有元素进行位置交换,只需要记录下角标,二者也是冒泡排序的一种优化方式。

冒牌排序由于需要进行双循环,事件复杂度为o(n^2),空间复杂度为o(1);

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。