冒泡排序
- 概念:比较数组中相邻的两个元素,如果第一个数比第二个数大,那么就交换这两个数的位置
- Java代码:
public static int[] bubbleSort(int[] array){
int temp;
//外层循环判断一共需要循环多少次
for (int i=0;i<array.length-1;i++){
//内层循环比较第一个数和第二个数,第一个数大于第二个数,那么就交换位置
for (int j=0;j< array.length-1-i;j++){
if (array [j]>array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
- 这个算法的时间复杂度为O(n^2)
- 一种优化的思路:
如果排序已经是排序排好从小到大的那么我们再直接用上面的方法就会浪费时间,所以我们可以添加一个标识来判断是否可以跳过部分步骤减少资源的浪费,例如
public static int[] bubbleSort(int[] array){
int temp;
//外层循环判断一共需要循环多少次
boolean flag=false;//通过flag标识符减少无意义的比较
for (int i=0;i<array.length-1;i++){
//内层循环比较第一个数和第二个数,第一个数大于第二个数,那么就交换位置
for (int j=0;j< array.length-1-i;j++){
if (array [j]>array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=true;
}
}
if(flag==false){
//如果flag为false说明进入内层循环后,没有进入if中,说明排序是已经排好了的
break;
}
}
return array;
}