冒泡排序的思想:主要是让满足的条件的数据放到后排。然后根据条件来判断相邻两个数据是否满足条件,如果满足条件就进行交换。使用双循环。外层循环控制循环的次数,里层循环是真正执行数据操作的地方,就是通过条件来对两相邻的数据进行交换。
private static void bubbleSort(int[] datas){
for(int i=0;i<datas.length;i++/++i){
boolean flag = false;
for (int j = 0;j<datas.length-i-1;j++/++j){
System.out.println("before"+j);
if(datas[j]<datas[j+1]){
int temp = datas[j];
datas[j] = datas[j+1];
datas[j+1] = temp;
flag = true;
}
}
if(!flag) break;//没有需要交换的说明,已经是顺序的,就可以提前结束。
}
}
冒泡排序注意事项:
- 为什么“j<datas.length-i-1”第二层循环条件这样写?“-i”表示后排都是排序好的,是有序的就不用进行比较了。“-1”的目的是在相邻数据比到最后的时候,防止"j+1"数组越界。
- 循环执行语句的顺序?先初始化->判断条件->{}里面的内容->j++/++j
- 为什么有个标记符号?作用是什么?减少外层循环的次数。因为排序的时候,可能就移动几次远远小于数组的长度,就已经排序好了,所有通过标记来结束剩下的循环。
时间复杂度:如果数组数据是有序的,时间复杂度是o(n),如果数组数据的顺序刚好与要拍的顺序是相反的则时间复杂度是o(n^2)
个人理解,有不对的地方,欢迎讨论。