排序算法-冒泡排序

2021-08-30  本文已影响0人  来个Android小哥

前言:排序是现在程序员的必备技能,是很多公司的面试必考点,不管是做移动端,后端开发,排序是绕不过的,众生平等。学习其排序的思想往往能解决不同类型的问题,所以静下心来,研究一下不同的排序算法,算是对自己有一个提升。

排序概述:排序就是将一组对象按照某种逻辑顺序重新排列的过程。

十大排序算法:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序,希尔排序,计数排序,基数排序,桶排序。

本文对冒泡排序走一个解析:

冒泡排序:其实这是一种很简单的排序算法,它反复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。这个工作重复地进行直到没有元素再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序工作步骤:

1.从数组头开始,比较相邻的元素,如果第一个比第二个大或者小,就进行交换工作。

2.对每一对相邻元素作同样的工作,从开始第一到尾部的最后一对,这样在最后的元素会是最大或者是最小的数。

3.一直重复步骤1和2,重复次数等于数组的长度,一直到排序彻底完成方可结束。

代码举例:

对一个数组进行排序:(86,11,77,23,32,45,58,63,93,4,37,22)

int[] array = {86,11,77,23,32,45,58,63,93,4,37,22};

排序代码展示:

冒泡排序

调用sort方法后打印如下:

冒泡排序打印结果

对该案例进行分析:

    (1).i==0   时,进行第一次内部循环

               1:   86 > 11  在if里面86 和 11交换了位置   数组==>(11,86,77,23,32,45,58,63,93,4,37,22)  内部循环第一次 j == 0

               2:   86 > 77 在if里面86 和 11交换了位置   数组==>(11,77,86,23,32,45,58,63,93,4,37,22)  内部循环第二次 j == 1

              ...... 一直重复这个步骤,内层循环结束第一次   (11,77,23,32,45,58,63,86,4,37,22,93

 (2).i==1  时,进行第二次内部循环

                1:   11 < 77   跳出if语句   数组==>(11,77,23,32,45,58,63,86,4,37,22,93)  内部循环第一次 j == 0

                 2:   77 < 86  跳出if语句   数组==>(11,77,86,23,32,45,58,63,93,4,37,22)  内部循环第二次 j == 1

              ...... 一直重复这个步骤,内层循环结束第二次   (11,77,23,32,45,58,63,86,4,37,86,93)

一直重复这个过程:直至外层完成,排序就完成了,看一下打印过程:

注意:在内层循环里有一个 j < array.length - 1 - I; 是因为每次排序一个完成,就减掉一个,减少每一次循环的次数,提高排序效率。

至此冒泡排序就到这里讲解结束了,细看的话其实一点也不复杂。

上一篇 下一篇

猜你喜欢

热点阅读