深入浅出的排序算法-冒泡排序

前言

大家好,我是Vic,今天给大家带来冒泡排序算法,希望你们喜欢

冒泡排序

为什么这个排序要叫冒泡呢?为什么不叫其他名词呢?其实这个取名是根据排序算法的基本思路命名的,见名知意,冒泡排序,就是想泡泡在水里一样,在水里大的泡泡先浮出水面,就是大的先排出来,最小的最慢排出。

冒泡排序,是对排序的各个元素从头到尾依次进行相邻的大小比较,比如你是队长,在你的面前有一排人,你要将其进行排序,依次按照从小到大排序。

怎么理解最大的值被排除,你是队长,你对面前的一群人看不惯,进行排序,从左到右开始,第一个和第二个进行比较,大的那个就被挑出来,与第三个进行比较,接下来就是依次按照这个方法比较,就能把那个最大的值,最高的给挑出来不是,这就是第一轮的比较。

接下来,最大的就不用跟他比较了,上面所述,在排序时,你面前的人,是不能乱动的,一旦比较哪个大,两者就换位,如果第一比第二个小,就是第二个大时,两者不用换位,第二个就与第三个进行比较。

依照这个方法,两两比较,大的都被排到了最后,那么一旦排完,是不是都依照从小到大,(从低到高)的顺序在你面前排好了。

  • 代码示例

我们用索引下标来解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//第一轮  
for(int index=0;index < arr.length-1; index++){
//相邻两个比较
if(arr[index] > arr[index+1]){
int temp = arr[index];
arr[index] = arr[index+1];
arr[index+1] = temp;
}
}

print(arr);

for(int index=0;index < arr.length-2;index++){
//这里arr.length-2,为什么比上一次多减了1呢?
//因为第一轮,把最大的排出来了,就不用比较了,少了一个人
if(arr[index] > arr[index+1]){
int temp = arr[index];
arr[index] = arr[index+1];
arr[index+1] = temp;
}
}

print(arr);

for(int index=0;index < arr.length-3;index++){
if(arr[index]>arr[index+1]){
int temp = arr[index];
arr[index] = arr[index+1];
arr[index+1] = temp;
}
}

print(arr);

  • 优化
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for(int num=1;num<arr.length;num++){  

    for(int index=0;index<arr.length-num;index++){

    if(arr[index]>arr[index+1]){
    int temp = arr[index];
    arr[index] = arr[index+1];
    arr[index+1] = temp;
    }
    }
    }

总结

  • 本文讲了冒泡排序,如果您还有更好地理解,欢迎沟通
  • 定位:分享 Android&Java知识点,有兴趣可以继续关注
-------------本文结束感谢您的阅读-------------
达叔小生 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!
0%