编程必备:排序算法之冒泡排序,就是这么简单

createh53周前 (05-03)技术教程8


本篇文章教你最基础的排序算法之一冒泡排序


一、概念解释

冒牌排序:这个算法的特点就是让最大的数字慢慢的冒泡浮到末端,故称冒泡排序

具体过程:如果数组的长度为8,那么冒泡排序的比较共有7轮(n-1),每一轮将最大的数字筛选移至末端

具体每一轮的比较方式是从最前面开始相邻两个数字两两比对,把较大的数字放至右侧,以此类推,每一轮就可以将最大的数字放至末端。


二、图片辅助理解

我们假设有一个数组如下,长度为8

int arr[] = {33,19,62,89,8,18,75,29};


第一轮排序如下:

第一次排序:33和19比较,33比19大,交换位置

第二次排序:33和62比较,33比62小,不用交换

第三次排序:62和89比较,62比89小,不用交换

第四次排序:89和8比较,89比8大,交换位置

第五次排序:89和18比较,89比18大,交换位置

第六次排序:89和75比较,89比75大,交换位置

第七次排序:89和29比较,89比29大,交换位置

第一轮交换结束,最大的数是89,移动至最末端


第二轮排序如下

第一次排序:19和33比较,19比33小,不用交换

第二次排序:33和62比较,33比62小,不用交换

第三次排序:62和8比较,62比8大,交换位置

第四次排序:62和18比较,62比18大,交换位置

第五次排序:62和75比较,62比75小,不用交换

第六次排序:75和29比较,75比29大,交换位置

由于第一轮已经将最大的数字移至最末端,所以最末端的数字就不参与比较

第二轮交换结束,最大的数是75,移动至倒二末端


第三轮排序如下

第一次排序:19和33比较,19比33小,不用交换

第二次排序:33和8比较,33比8大,交换位置

第三次排序:33和18比较,33比18大,交换位置

第四次排序:33和62比较,33比62小,不用交换

第五次排序:62和29比较,62比29大,交换位置

第三轮交换结束,最大的数是62,移动至倒三末端


第四轮排序如下

第一次排序:19和8比较,19比8大,交换位置

第二次排序:19和18比较,19比18大,交换位置

第三次排序:19和33比较,19比33小,不用交换

第四次排序:33和29比较,33比29大,交换位置

第四轮交换结束,最大的数是33,移动至倒四末端


第五轮排序如下

第一次排序:8和18比较,8比18小,不用交换

第二次排序:18和19比较,18比19小,不用交换

第三次排序:19和29比较,19比29小,不用交换

第五轮交换结束,最大的数是29,移动至倒五末端


第六轮排序如下

第一次排序:8和18比较,8比18小,不用交换

第二次排序:18和19比较,18比19小,不用交换

第六轮交换结束,最大的数是62,移动至倒六末端


第七轮排序如下

第一次排序:8和18比较,8比18小,不用交换

第七轮交换结束,最大的数是62,移动至倒七末端


三、总结规律

1.首先比较的轮次是数组的长度-1 ,因为最后一轮只有一个数不用比较。

2.其次每一轮中需要排序的次数。第1轮比较7次,第二轮比较6次,以此类推,所以轮次是数组的长度-目前的轮次

3.每一轮里面做的事情是从前往后开始两两比较,如果右边的数比左边的数大那么左右进行交换


四、转化代码

从规律中我们很容易看出来这是双层for循环,外层控制比较的轮次,内层控制每轮的排序次数;

外层因为我们习惯i=0开始遍历,所以条件改为arr.length-1。满足比较的轮次是数组长度-1;

内层从0开始遍历,同理初始条件改为arr.length-1。由于还要减去目前的轮次,所以条件变为arr.length-1-i;

内层逻辑代码是当前面的数比后面的数大时,那么两两交换

public void sort() {
    int arr[] = {33,19,62,89,8,18,75,29};
    //循环的轮次是数组的长度-1
    //i循环从0开始,总共循环0,1,2,3,4,5,6 共7次
    for (int i = 0; i < arr.length-1; i++) {
        //j循环从0开始,第一轮循环7次,第二轮循环6次,以此类推到1次。
        for (int j = 0; j < arr.length-1-i; j++) {
            //如果前面一个数比后面一个数大
            if(arr[j]>arr[j+1]){
                //那么两两交换
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

以上就是本篇文章的全部内容了。

相关文章

C语言排序方法——冒泡排序详解!你学会了吗?

冒泡排序法的基本思路为:每次将相邻的两个数比较,将小的调在前面。举个例子,如果有6个数:9,8,5,4,2,0。第一次先将最前面的两个数9和8对调。第二次将第2个数和第3个数对调(9和5)······...

冒泡排序(冒泡排序python)

冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是对待排序的元素从前向后依次比较相邻的两个元素,如果顺序不对则交换它们的位置,轮比较下来,最大的元素就会“冒泡”到数组的末尾重复这个过...

常见的三种排序(冒泡排序、插入排序、选择排序)

冒泡排序什么是冒泡排序?百度百科解释:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要...

Python实现冒泡排序(python冒泡排序列表)

''' 冒泡排序原理:比较列表中相邻的两个元素大小,如果第2个元素比第1个元素大,就交换它俩的位置,从列表的开始到结尾, 依次对每一组相邻的2个元素都进行比较,这样最大的元素就...

十大经典排序(2)——冒泡排序(冒泡排序和简单排序)

什么是冒泡排序冒泡排序(Bubble Sort)是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点点向数组的一侧移动。冒泡排序的原理每一趟只能确定将一个数归...

Scratch少儿编程,冒泡排序法(冒泡排序scl程序)

冒泡排序是8大基础排序里面最为基础的一种。从数组第一个数开始,和第二个开始比较。然后根据比较结果开始交换位置。直到最后从小到大,或者从大到小的排列。狭义上面的冒泡,当然是从小到大的排大。因为泡泡总是较...