最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

环球视点!简单排序

来源:博客园


【资料图】

选择排序

选择排序原理:选择一个数组中的第i个数,跟后面所有数进行比较,如果i位置数大于后面位置的数,交换,直到达到数组的末尾。

时间复杂度: O(N方)

代码:

public static void selectionSort(int[] arr) {        if (arr == null || arr.length < 2) {            return;        }        // 0~n-1        // 1~n-1        // 2~n-1        for (int i = 0; i < arr.length - 1; i++) { // i ~ N-1            // 最小值在哪个位置上  i~n-1            int minIndex = i;            for (int j = i + 1; j < arr.length; j++) { // i ~ N-1 上找最小值的下标                 minIndex = arr[j] < arr[minIndex] ? j : minIndex;            }            swap(arr, i, minIndex);        }    }​    public static void swap(int[] arr, int i, int j) {        int tmp = arr[i];        arr[i] = arr[j];        arr[j] = tmp;    }

冒泡排序

冒泡排序原理:冒泡排序是在数组0-i范围上,相邻两数进行判断,大数交换到后面,直到把0-i上的最大值移到最后,然后再在0- i-1上进行交换最大值。

时间复杂度: O(N方)

代码:

public static void bubbleSort(int[] arr) {        if (arr == null || arr.length < 2) {            return;        }        for (int e = arr.length - 1; e > 0; e--) { // 0 ~ e            for (int i = 0; i < e; i++) {                if (arr[i] > arr[i + 1]) {                    swap(arr, i, i + 1);                }            }        }    }​    // 交换arr的i和j位置上的值    public static void swap(int[] arr, int i, int j) {        arr[i] = arr[i] ^ arr[j];        arr[j] = arr[i] ^ arr[j];        arr[i] = arr[i] ^ arr[j];    }

插入排序

插入排序原理:保证0-i上有序,然后让i和i+1进行比较,如果ii+1的话,交互,然后i-1和i再进行比较。

时间复杂度: O(N方) 最好情况O(N)

代码:

public static void insertionSort(int[] arr) {        if (arr == null || arr.length < 2) {            return;        }        // 0~0 有序的        // 0~i 想有序        for (int i = 1; i < arr.length; i++) { // 0 ~ i 做到有序                        // arr[i]往前看,一直交换到合适的位置停止            // ...(<=)  ?       <- i            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {                swap(arr, j, j + 1);            }        }    }​    // i和j是一个位置的话,会出错    public static void swap(int[] arr, int i, int j) {        arr[i] = arr[i] ^ arr[j];        arr[j] = arr[i] ^ arr[j];        arr[i] = arr[i] ^ arr[j];    }

关键词: 时间复杂度 冒泡排序 选择排序