🥫🍞

排序算法

2022-07-24

冒泡排序

1
2
3
4
5
6
7
8
9
10
public void sort() {
for (int i = 0; i < arr.length; i++) {

for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换
}
}
}
}

归并排序

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
public class MergeSorter {

public static void main(String[] args) {
MergeSorter mergeSorter = new MergeSorter(new int[]{3, 1, 4});
mergeSorter.sort();
System.out.println(Arrays.toString(mergeSorter.getArr()));
}

private final int[] arr;

public MergeSorter(int[] arr) {
this.arr = arr;
}

public int[] getArr() {
return arr;
}

public void sort() {
doSort(0, arr.length - 1);
}

private void doSort(int left, int right) {
if (left == right) {
return;
}
doSort(left, (left + right) / 2);
doSort((left + right) / 2 + 1, right);
merge(left, (left + right) / 2, right);
}

private void merge(int left, int middle, int right) {
// 两个元素
if (right - left == 1 && arr[left] > arr[right]) {
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
return;
}

int[] merged = new int[right - left + 1];
// merged 数组的指针
int mergedPoint = 0;
int leftPoint = 0; // left 指针
int rightPoint = middle + 1; // right 指针

while (leftPoint <= middle && rightPoint <= right) {
int value;
if (arr[leftPoint] <= arr[rightPoint]) {
value = arr[leftPoint++];
} else {
value = arr[rightPoint++];
}
merged[mergedPoint++] = value;
}
while (leftPoint <= middle) {
merged[mergedPoint++] = arr[leftPoint++];
}
while (rightPoint <= right) {
merged[mergedPoint++] = arr[rightPoint++];
}
System.arraycopy(merged, 0, arr, left, merged.length);
}
}
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章