冒泡排序

240 阅读1分钟
import java.util.Arrays;

/**
 * 冒泡排序
 * 个人理解:1.元素从0到n,相邻两个比较,大的后移,直到最后
 *  2.每比较一趟,下一趟最后一个元素就不需要再比较,就少一趟循环
 *  3.时间复杂度,最好情况O(n),最坏情况O(n²)
 *  3.空间复杂度,因为没有用到额外空间,所以为0(1)
 *  4.稳定性,因为没有发生跳跃式变换(跳跃式指非相邻元素交换位置),所以稳定
 */
public class SortTest {

    public static void main(String[] args) {
        int[] arr = {70, 12, 82, 43, 99, 23, 38, 53, 22};

        bubbleSort(arr);
        Arrays.stream(arr).forEach(a->System.out.print(a+" "));
    }

    public static void bubbleSort(int[] arr) {
        for (int i=0; i<arr.length-1; i++) {
            boolean flag = false;
            for (int j=0; j<arr.length-1-i; j++) {
                if (arr[j] > arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = true;
                }
            }
            // 如果某一趟没有元素交换,说明已经排好序了
            if (!flag) {
                break;
            }
        }
    }

}