最近重新把算法也同步整理一遍,虽然平时用的少,但至少是一种思想,对于编程的影响还是有的。
冒泡排序算是我大学以来唯一印象深刻且现在还记得的算法,原因因为非常简单却不是经典。
一个存放着无序数字的数组,如何使之进行有规律的排序。于是冒泡算法就提供了两个for循环嵌套(第一个位置和第二个位置的比较,如果大于就对换位置,否则就继续第二个位置和第三个位置进行比较,以此类推,第一轮结束后,最大的数字就已经放置在数组的最后一个位置上了),从而解决了从小到大的排序问题(同理从大到下)。 代码贴如下:
/*
* 冒泡排序
*/
public class BubbleSort {
public void bubble(Integer[] data){
for(int i=0;i<data.length;i++){
for(int j=0;j<data.length-1-i;j++){
if(data[j]>data[j+1]){ //如果后一个数小于前一个数交换
int tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
}
}
}
}
}
这样就实现了冒泡排序,不过这种效率不是最好的,时间复杂度是O(n²)。
改进效率请参考快速排序。