赞
踩
目录
数组中,一个数出现奇数,一个数出现偶数。那么怎么找到这个奇数。
数组中有俩种数出现了奇数次,其他的数都是偶数次。找到并打印这俩个数。
设计一个栈,在基本功能的基础上,增加返回栈中最小元素的功能(使用现成的栈结构)
时间复杂度为O(N²)
选择排序过程: 一个arr数组,我从
arr[0~N-1]范围上,找到最小值所在的位置,然后把最小值交换到0位置上;
arr[1~N-1]范围上,找到最小值所在的位置,然后把最小值交换到1位置上;
arr[2~N-1]范围上,找到最小值所在的位置,然后把最小值交换到2位置上;
以此类推~~~~
arr[N-2~N-1]范围上,找到最小值所在的位置,然后把最小值交换到N-2位置上;
- public static void selectionSort(int[] arr) {
- if (arr == null || arr.length < 2) {
- return;
- }
- for (int i = 0; i < arr.length - 1; i++) {
- int minIndex = i; //记录最小值的位置
- for (int j = i + 1; j < arr.length; j++) {
- 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;
- }
时间复杂度是O(N²)
冒泡排序过程:一个arr数组,
arr[0]和arr[0~N-1]范围上进行:arr[0]和arr[1],谁大谁往后移,arr[1]和arr[2]谁大谁往后移~~~以此类推~~~arr[N-2]和arr[N-1],谁大谁往后移到N-1位置上。
arr[0]和arr[0~N-2]范围上进行;
arr[0]和arr[0~N-3]范围上进行;
- public static void bubbleSort(int[] arr) {
- if (arr == null || arr.length < 2) {
- return;
- }
- for (int e = arr.length - 1; e > 0; e--) {
- for (int i = 0; i < e; i++) {
- if (arr[i] > arr[i + 1]) {
- swap(arr, i, i + 1);
- }
- }
- }
- }
- 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];
- }
时间复杂度是O(N²)
插入排序过程:一个arr数组
arr[0~0]上有序,必然后续;
arr[0~1]上有序,让arr[1]往前看,如果arr[1]<arr[0],就交换。此时有序
以此类推~~~
想让arr[0~i]上有序,让i往前看,小于就交换,直到左边的数不比自己大。
- public static void insertionSort(int[] arr) {
- if (arr == null || arr.length < 2) {
- return;
- }
-
- for (int i = 1; i < arr.length; i++) {
- for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
- swap(arr, j, j + 1);
- }
- }
- }
- 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];
- }
O(1)
O(LogN)
O(N)
O(N*LogN)
O(N²)
O(2^N)
O(N!)
只要能正确构建左右俩侧的淘汰逻辑,你就可以二分
时间复杂度是O(LogN)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。