第二周打卡:A-冒泡排序&插入排序&选择排序

冒泡排序

冒泡排序依次比较相邻的两个数字,将小数放在前面,大数放在后面。第一趟:比较第一和第二个数,小数放前,大数放后;接下来比较第二个数和第三个数,依然小数放前,大数放后;依次类推,直到最后两个数,这样最大的数就放在了最后一个位置。第二趟:比较第一个和第二个数,小数放前,大数放后,直到倒数第二个数。…重复上述过程,直至排序完成。

具体实现如下所示:

     public static void bubbleSort(int[] array){
        if (array.length <= 1) return;
        int temp;
        for(int i=0 ; i<array.length-1 ; i++){
            for (int j = 0; j<array.length-i-1; j++){
                if (array[j] > array[j+1]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] array = {10, 7, 2, 4, 7, 62, 3, 4, 2, 1, 19};
        bubbleSort(array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

过程示意图如下所示:
在这里插入图片描述
冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。

插入排序

假设第一个位置上是已经排好序的,这样仅需对1~n-1位置上的元素进行排序,将它们插入到正确的位置。每次遍历的任务是:通过扫描前面已排序的子列表,将位置i处的元素定位到从0到i的子列表之内的正确的位置上。

具体实现如下所示:

    public static void insertSort(int[] array){
        int i,j,target;
        for (i=1; i<array.length ; i++){
            j=i;
            target = array[i];
            while (j>0 && target < array[j-1]){
                array[j] = array[j-1];
                j--;
            }
            array[j] = target;
        }
    }

    public static void main(String[] args) {
        int[] array = {10, 7, 2, 4, 7, 62, 3, 4, 2, 1, 19};
        insertSort(array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

过程示意图如下所示:
在这里插入图片描述
插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。

选择排序

经过第一轮比较后,将最小的值与第一个位置的值进行交换;第二轮比较排除第一个位置的元素,比较剩余元素的最大值,然后和第二个位置进行交换,以此类推,直至排好序。

具体代码如下所示:

    public static void selectionSort(int[] array) {
        int target,temp;
        for (int i = 0; i < array.length; i++) {
            target = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[target] > array[j]) target = j;
            }
            if (target != i){
                temp = array[target];
                array[target] = array[i];
                array[i] = temp;
            }
        }
    }

    public static void main(String[] args) {
        int[] array = {10, 7, 2, 4, 7, 62, 3, 4, 2, 1, 19};
        selectionSort(array);
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

过程示意图如下所示:
在这里插入图片描述

选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。

猜你喜欢

转载自blog.csdn.net/weixin_44331516/article/details/88813754
今日推荐