冒泡排序
冒泡排序:
- 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置。
- 每一次比较,都会产生出一个最大和一个最小的数。
- 下一轮则可以少一次排序
- 依次循环,直到结束。
- 我们看到嵌套循环,想到这个算法的时间复杂度为O(n2)。
冒泡排序数字替换逻辑:
将第一额数存放到一个临时的空间当中
将后一个数字放入到前一个数字空间中
将存放在临时空间中的前一个数字放入到原本后一个数字的空间中
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| import java.util.Arrays;
public class Demo02 { public static void main(String[] args) { int[] arrays = {1, 23, 454, 342, 55, 8848, 367, 365, 9656};
System.out.println(Arrays.toString(arrays));
sort(arrays); System.out.println(Arrays.toString(arrays)); }
public static int[] sort(int[] arrays) { int num = 0;
for (int i = 0; i < arrays.length - 1; i++) {
boolean flag = false;
for (int j = 0; j < arrays.length - 1 - i; j++) { if (arrays[j + 1] > arrays[j]) { num = arrays[j]; arrays[j] = arrays[j + 1]; arrays[j + 1] = num; flag = true; } } if (flag == false) { break; } }
return arrays; } }
|
二分查找
二分查找的主要特点是,每次查找能排除一般元素,这样效率明显提高。但是二分查找要求比较苛刻,它要求元素必须是有序的(重要),否则不能进行二分查找。
具体操作如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public class Test3 { public static void main(String[] args) { int[] arr = {7, 23, 79, 81, 103, 127, 131, 147};
System.out.println(binarySearch(arr, 150));
System.out.println(Arrays.binarySearch(arr, 81)); }
public static int binarySearch(int[] arr, int data){ int left = 0; int right = arr.length - 1;
while (left <= right) { int middle = left + ((right - left) >> 1); if (data < arr[middle]) { right = middle - 1; } else if (data > arr[middle]) { left = middle + 1; } else { return middle; } } return -1; } }
|
链接
封面图来源:https://www.pixiv.net/artworks/76043793