冒泡排序
彪哥的性格就是先看代码,代码如下:
public class BubbleSort {
public static void main(String[] args) {
int [] arr = {5,2,9,7,3,1,4,6,8,0};
//排序前
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
for(int out=(arr.length-1);out>0;out--){
for(int in=0;in<out;in++){
if(arr[in] > arr[in+1]){
int tmp = arr[in];
arr[in] = arr[in+1];
arr[in+1] = tmp;
}
}
}
//排序后
for(int i:arr){
System.out.print(i+" ");
}
}
}
5 2 9 7 3 1 4 6 8 0
0 1 2 3 4 5 6 7 8 9
这个算法的思路是要将最小的数据项放在数组的最开始(数组下标为0),并将最大的数据项放在数组的最后(数组下标为length-1)。
外层 for循环的计数器 out 从数组的最后开始,即 out 等于length-1,每经过一次循环 out 减1。下标大于 out的数据项都已经是排好序的了 。变量 out在每完成一次内部循环 (计数器为 in)后就左移一位, 因此算法就不再处理那些已经排好序的数据了 。
内层 for循环计数器 in从数组的最开始算起,即 in=0,每完成一次内部循环体加一,当它等于out时结束一次循环。在内层 for循环体中,数组下标为 in和 in+1的两个数据项进行比较,如果下标为 in的数据项大于下标为 in+1的数据项,则交换两个数据项。
冒泡排序的效率
无论何时, 只要看到一个循环嵌套在另一个循环里,就可以怀疑这个算法的运行时间为 O(N2) 级。外层循环执行 N次,内部循环对于每一次外层循环都执行 N次(或者几分之 N次)。这就意味着将大约需要执行 N*N或者 N2次某个基本操作。