冒泡排序
冒泡排序是最为出名的一种排序算法之一,总共有八大排序
冒泡排序就是将两个元素进行比较 根据比较的结果 进行一个操作
- 冒泡排序有两层循环,外层冒泡轮数,里层依次比较。
- 时间复杂度为O(n2)
难点
- 注意下标边界问题
- 外层循环的原理及如何合理的使用
- for (int i = 0; i <x.length-1; i++) {]
定义了循环要进行几轮,在运行中通常i被用来记为当前第几轮
- 内层循环的作用及结构
- for (int j = 0; j <x.length-1-i; j++)
定义了需要进行比较的元素下标**-i是因为每次循环都会比较出一个最极端的元素,所以后面的循环比较它不需要参与进来。-i可以将最后的下标排除。以达到优化的效果**
- 交换元素
if (x[j]>x[j+1]){
m=x[j];
x[j]=x[j+1];
x[j+1]=m;
当两个元素比较需要交换位置时。可以定义一个第三方变量 ,将其中一个元素的值暂存到第三方变量。接着在一个个去覆盖已达到交换的效果
注意:赋值是后面的元素赋值给前面的元素例如
x=y 那么是x变成y
代码实例
public static void main(String[] args) {
int[]ax={15,3,8,2,};
int[]bx=sort(ax);//调用完我们自己写的方法 返回为一个排序后的数组
System.out.println(Arrays.toString(bx));
}public static int[] sort(int[]x){
int m=0;//定义一个第三方变量
//外层循环 判断要走多少次,由于下标从0开始所以-1
for (int i = 0; i <x.length-1; i++) {
//内层循环,用于比较下标的元素,因为每次比较都会推出一个最大值(最小值)所以需要减去i。也就意味着已经是最大的下标排除掉不用比较
for (int j = 0; j <x.length-1-i; j++) {
if (x[j]>x[j+1]){
m=x[j];
x[j]=x[j+1];
x[j+1]=m;
}
}
}return x;//排序完成后返回为一个数组
}
优化
- 利用布尔值进行跳出不必要的循环
- 思路:如果进行了一次比较没有进行交换元素。那么就是已经排序了。后面可以直接利用break直接跳出循环
代码
public static int[] sort(int[]x){
int m=0;//定义一个第三方变量
//外层循环 判断要走多少次,由于下标从0开始所以-1
for (int i = 0; i <x.length-1; i++) {
boolean flag=true;
//内层循环,用于比较下标的元素,因为每次比较都会推出一个最大值(最小值)所以需要减去i。也就意味着已经是最大的下标排除掉不用比较
for (int j = 0; j <x.length-1-i; j++) {
if (x[j]>x[j+1]){
m=x[j];
x[j]=x[j+1];
x[j+1]=m;
flag=false;
}
}if (flag==true){
break;
}
}return x;