冒泡排序(BubbleSort)
1、思想
通过无序区中相邻记录关键字间的比较和位置的交换,使关键字最小的记录如气泡一般逐渐往上“漂浮”直至“水面”。
2、时间复杂度
最好情况下:正序有序,则只需要比较n次。故,为O(n)
最坏情况下: 逆序有序,则需要比较(n-1)+(n-2)+……+1,故,为O(N*N)
3、稳定性
排序过程中只交换相邻两个元素的位置。因此,当两个数相等时,是没必要交换两个数的位置的。所以,它们的相对位置并没有改变,冒泡排序算法是稳定的!
4、实现
public class BubbleSort {
/**
* @param args
*/
public static void main(String[] args) {
int[] data = { 49, 38, 65, 97, 76, 13, 27, 9 };
bubbleSort(data, 0, data.length - 1); // 第一种实现方式
printData(data);
}
public static void bubbleSort(int [] data ,int low ,int high){
if(low>=high){
return ;
}
for(int i =low ;i<high;i++){
for(int j=high;j>i;j--){
if(data[i]>data[j]){
swap(data, i, j);
}
}
}
}
public static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
public static void printData(int[] data) {
for (int i : data) {
System.out.print(i + " ");
}
}
}