算法之冒泡排序

【算法之冒泡排序】冒泡排序算是我们最为常见的一种排序方式了,也比较简单,记得以前当时在学校面试实习岗位,其中有两场面试要求我们现场手写冒泡排序,好了,今天就算是在回忆一波,总结一下。
冒泡排序:
思想:在一个序列中,通过对相邻的数据进行两两比较(核心:两两比较),如果是升序排序,将比较大的数放在右边,如果是降序,将比较后小的数放在右边,第一次比较,要从第一位比较最后一位,将比较得来的最大或者最小的数放在最后一位,第二次比较,在剩下的数据中去比较得出最大或者最小数据放在倒数第二个位置上,以此类推。下面用一个例子来说明:
比较数据:1, 23,67, 12, 109, 5  目标:将这6个数据进行升序排列
第一趟比较之后:1,23,12,67,5,109  过程中数据比较了5次
第二趟比较之后:1,12,23,5,67,109  过程中数据比较了4次
第三趟比较之后:1,12,5,23,67,109 过程中数据比较了3次
第四趟比较之后:1,5,12,23,67,109 过程中数据比较了2次
第五趟比较之后:1,5,12,23,67,109 过程中数据比较了1次
由上面可得:6个数据在排序的过程中一共比较了15次,可以总结一个规律:如果有n个数据进行排序,那么比较次数是(n-1)*n/2; 至于交换次数这个不一定,如果序列本身有序,那么一次都不会交换,如果数据全部倒序,也会交换(n-1)*n/2次,这个指的是数据全部倒序,实际交换次数还要根据实际情况而定。
上面是思想那么用代码怎么怎么表示呢?请看下面:

int arr[] = new int[]{1, 23,67, 12, 109, 5}; //要排序的数组,我们要求升序 //冒泡排序 public void BubbleSort(int[] arr) { for (int i = 0; i < arr.length; i++) { //表示要比较躺数 for (int j = 0; j < arr.length - i - 1; j++) { //这个表示第i躺需要比较次数 if (arr[j] > arr[j + 1]) {//这里要求的是升序排列,把比较得来的大的数放在后面 int temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } }

该说的上面也都说了,冒泡很简单,同时也是我们必须掌握的基础知识,有啥不理解的,最好自己能拿着笔亲手写一个序列,然后把比较的过程写出来,一旦理解了,估计也就会了,因为代码也很简单。
如果有错的或者说的不准确的地方,请联系我,及时改正,谢谢大家!

    推荐阅读