排序算法
- 冒泡排序
- 插入排序
- 快速排序
- 选择排序
- 希尔排序
1冒泡排序
1.1 原理
每轮循环 多次两两比较选出一个最大的排在最后面
1.2 原码
1 | /** |
1.3 复杂度
* 时间复杂度
2直接插入排序
2.1 原理
直接插入排序是将未排序的数据插入至已排好序序列的合适位置。
具体流程如下:
1、首先比较数组的前两个数据,并排序;
2、比较第三个元素与前两个排好序的数据,并将第三个元素放入适当的位置;
3、比较第四个元素与前三个排好序的数据,并将第四个元素放入适当的位置;
……
4、直至把最后一个元素放入适当的位置。
2.2 代码
1 | public class insertSort { |
3快速排序
- https://www.bilibili.com/video/BV1at411T75o/
3.1原理简述
- 找一个基准数,将大于这个基准数的数放在右边,小于它的放在其左边
-
3.2源代码
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
36public class QuickSort {
private static void quickSort(int[] a, int left, int right) {
// 将a分成一边大的,一边小的,重复执行这个过程
if (left < right) {
int index = getIndex(a, left, right);
quickSort(a, left, index - 1);
quickSort(a, index + 1, right);
}
}
private static int getIndex(int[] a, int left, int right) {
int standard = a[left]; // 基准数据
while (left < right) {
while (left < right && a[right] >= standard) { //必须要 >= 不然 =等于那个得不到处理 left也指不到这边
right--; // 当队尾的元素大于等于基准数据时,向前挪动high指针
}
a[left] = a[right]; //将小于基准数据的值放到左边(小的一边)
while (left < right && a[left] <= standard) {
left++;
}
a[right] = a[left]; //将大于基准数据的值放到右边(大的一边)
}
a[left] = standard; //此时left==right 同时这个位置也是standard的位置
return left;
}
public static void main(String[] args) {
int[] a = {1, 2, 4, 2, 21, 563, 1, 6246, 13, 4331};
quickSort(a, 0, a.length - 1);
for (int i : a) {
System.out.println(i);
}
}
}
4选择排序
4.1原理简述:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
4.2源代码
1 | public class SelectSort { |
5希尔排序
- 希尔排序
5.1原理简述
希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
5.2源代码
1 | public class ShellSort { |
图片来源于网络,如有侵权请联系我删除,谢谢。
参考:https://www.sohu.com/a/299382768_478315
https://www.cnblogs.com/guoyaohua/p/8600214.html
发布时间: 2020-04-22 2:40:10
更新时间: 2022-04-21 16:18:49
本文链接: https://wyatt.ink/posts/Airthmetic/61237.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!