冒泡排序
冒泡排序的代码相当简单,仅用两层循环,外层表示冒泡轮数,里层依次比较
//比较数组中,两个相邻的元素,如果第一个数比第二个数大,就交换他们的位置。
//每一次比较,都会产生一个最大或者最小的数字
//下一轮则可以少一次排序
//依次排序,直到结束
public static int sort(int[] array){
//外层循环,判断要走多少次;
for(int i=0;i<array.length-1;i++){
//内层循环,判断要两个数,如果第一个数比第二个数大,则交换位置
for(int j=0;j<array.length-1-i;j++){
if(array[j+1]>array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
return array;
}
}
冒泡排序的空间复杂度为O(n^2);
优化后的代码如下:
public static int sort(int[] array){
//外层循环,判断要走多少次;
for(int i=0;i<array.length-1;i++){
boolean flag=false;//通过flag标识为减少没有意义的比较
//内层循环,判断要两个数,如果第一个数比第二个数大,则交换位置
for(int j=0;j<array.length-1-i;j++){
if(array[j+1]>array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=true;
}
}
if(flag==flase){
break;
}
return array;
}
}