冒泡排序、选择排序

9 阅读2分钟

冒泡排序

int[] arr = {13, 2, 1, 23, 4, 5, 16, 7, 8, 38, 3, 4, 11, 5, 6, 7};
System.out.println("冒泡排序前:" + Arrays.toString(arr));

for (int i = 0; i < arr.length - 1; i++) {
    for (int j = 0; j < arr.length -i -1; j++) {
        // 这里的判断决定是升序还是降序,>升序,<降序
        if (arr[j] > arr[j + 1]){
            int temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}
System.out.println("冒泡排序后:" + Arrays.toString(arr));

在这里插入图片描述

说明:冒泡排序时间复杂度是O(n²),空间复杂度是O(1),是稳定的排序(值相同,排序前后相对位置不发生改变)

选择排序

int[] arr = {13, 2, 1, 23, 4, 5, 16, 7, 8, 38, 3, 4, 11, 5, 6, 7};
System.out.println("选择排序前:" + Arrays.toString(arr));

for (int i = 0; i < arr.length - 1; i++) {
    for (int j = i + 1; j < arr.length; j++) {
        // 这里的判断决定是升序还是降序,>升序,<降序
        if (arr[i] > arr[j]) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}
System.out.println("选择排序后:" + Arrays.toString(arr));

选择排序还有另一种代码表现,博主以前看到的选择排序都是下面的这样的

int[] arr = {13, 2, 1, 23, 4, 5, 16, 7, 8, 38, 3, 4, 11, 5, 6, 7};
System.out.println("选择排序前:" + Arrays.toString(arr));

for (int i = 0; i < arr.length - 1; i++) {
    int min = i;
    for (int j = i + 1; j < arr.length; j++) {
        // 这里的判断决定是升序还是降序,>升序,<降序
        if (arr[min] > arr[j]) {
            min = j;
        }
    }
    // 和上面那份代码的改动在:不是交换相邻元素,而是一步到位,直接和该元素应该存放的位置进行交换
    if (min != i) {
        int temp = arr[min];
        arr[min] = arr[i];
        arr[i] = temp;
    }
}
System.out.println("选择排序后:" + Arrays.toString(arr));

在这里插入图片描述

说明:选择排序时间复杂度是O(n²),空间复杂度是O(1),是不稳定的排序

分析:

选择排序交换次数比冒泡排序少,所以元素较少时,使用选择排序效率高;

选择排序不稳定,所以需要排序稳定时,使用冒泡排序

首次发布

hezhongying.blog.csdn.net/article/det…