当听到别人说用了冒泡排序进行排序时,不了解的肯定疑惑什么是冒泡排序、定义是什么?
定义:n个记录进行冒泡排序的方法是:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则交换两个记录的值,然后比较第二个记录和第三个记录的关键字,依此类推,直到第n-1个记录和第n个记录的关键字比较过为止。上述过程称为第一趟冒泡排序,其结果是关键字最大的记录被交换到第n个记录位置上。然后进行第二趟冒泡排序,对前n-1个记录进行同样的操作,其结果是关键字次大的记录被交换到第n-1个记录的位置上。最多进行n-1趟,所记录有序排列。若在某趟冒泡排序过程中没有进行相邻位置的元素交换处理,则可结束排序过程。
冒泡排序法在最好情况下(待排序列已按关键码有序),只需做一趟排序,元素的比较次数为n-1且不需要交换元素,因此总比较次数为n-1次,总交换次数为0次。在最坏情况下(元素已经逆序排列),进行第j趟排序时,最大的j-1个元素已经排好序,其余的n-(j-1)个元素需要进行n-j次比较和n-j次交换,因此总比较次数为n(n-1)/2,总交换次数为n(n-1)/2.
冒泡排序是一种稳定的排序方法,其时间复杂度为O(n的二次方)。
在排序过程中仅需要一个元素的辅助空间用于元素交换,空间复杂度为O(1)。
了解了冒泡排序定义后,那就开始实践吧!
/**
* 冒泡排序
* @author ZL
* 2017年8月13日
*/
public class BubbleSort {
public static void main(String[] args) {
int[] ints={12,55,34,143,51,31,85,61,42,29,49,43,64,59,64,46,85,15,62,88};
System.out.println("*****************排序之前***************");
for (int i : ints) {
System.out.print(i+" ");
}
for(int i=ints.length-2;i>=0;i--){
for(int j=0;j<=i;j++){
if(ints[j]>ints[j+1]){
//左边比右边大
int temp;
temp=ints[j];
ints[j]=ints[j+1];
ints[j+1]=temp;
}
}
}
System.out.println("\n*****************排序之后***************");
for (int i : ints) {
System.out.print(i+" ");
}
}
}
运行结果:
*****************排序之前***************
12 55 34 143 51 31 85 61 42 29 49 43 64 59 64 46 85 15 62 88
*****************排序之后***************
12 15 29 31 34 42 43 46 49 51 55 59 61 62 64 64 85 85 88 143