数据结构之冒泡排序
在数据结构的算法中,利用交换数据元素的位置进行排序的方法称作为交换排序,而冒泡排序就是常用的交换算法之一。
【冒泡排序的基本思想】设数组a中存放了n个数据元素,循环进行n-1趟如下的排序过程,从最后一个元素开始比较,第一趟时,依次比较相邻两个数据元素 a[i] 和 a[i-1] ,若为逆序,即a[i-1] > a[i],则交换两个数据元素,否则不交换,这样数值大的数据元素将被放置在a[n-1]中;第二趟时,数据元素个数减1,即数据元素个数为n-1,操作方法和第1趟的类似,这样整个n个数据元素集合中数值次大的数据元素将被放置在a[n-2]中;当第一趟结束时,整个n个数据元素集合中次小的数据元素将被放置在 a[1] 中,a[0] 中放置了最小的数据元素。
【举个栗子】假设数组a中元素为 38、27、2、5,则在第一趟中,先从数组最后一个数开始和其相邻元素进行比较,即5和2进行比较,5比2大,不交换;然后2和27比较,2比27小,交换,数组变成了38、2、27、5,这时候2再与38比较,2比38小,交换,数组变成2、38、27、5,所以交换排序第一趟比较后数组变为:
2、38、27、5
同理,在第二趟中,先从数组最后一个数开始和其相邻元素进行比较,一直比较到倒数第二个。即5和27进行比较,5比27小,交换,数组变成;2、38、5、27;然后5和38比较,5比38小,交换,数组变成了2、5、38、27,所以交换排序第二趟比较后数组变为:
2、5、38、27
在第三趟中,先从数组最后一个数开始和其相邻元素进行比较。即27和38进行比较,27比38小,交换,数组变成;2、5、27、38。所以交换排序第三趟比较后数组变为:
2、5、27、38
可以看出,在一个包含n个元素的数组中,经过n-1趟冒泡排序便可实现排序。
代码:
class BubbleSort{
public static void sort(long[] arr) {
//临时变量
long tmp = 0;
//排序运行的趟数
for(int i = 0;i<arr.length-1;i++) {
//要交换的最大次数,最后面一个元素和它前一位进行判断,如果比它小,则交换位置
for(int j = arr.length-1;j>i;j--) {
if(arr[j]<arr[j-1]) {
//进行交换
tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
}