冒泡排序
算法步骤
- 相邻两个元素进行比较,大的放右边,小的放左边;
- 第一轮比较结束后,就可以找到最大值,第二轮比第一次循环少一次
- 若有n个数据参与排序,只需要进行n-1次循环即可得到最终的排序结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ed60abae3570462fbed3accbb23f5bae.gif)
具体代码实现
public class Bubble {
public static void main(String[] args) {
int[] arr = {3, 2, 4, 6, 5, 1, 8, 7};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i : arr) {
System.out.print(i+" ");
}
}
}
选择排序
- 从0索引开始,与后面的元素进行逐步比较,小的放左面,大的放右边
- 第一轮比较结束后,就可以找到最小值,第二轮比第一次循环少一次
- 若有n个数据参与排序,只需要进行n-1次循环即可得到最终的排序结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a1dae20772e54923821dd5f9a6b73a6c.gif)
具体代码实现:
public class Selection {
public static void main(String[] args) {
int[] arr = {3, 2, 4, 6, 5, 1, 8, 7};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i+1 ; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
for (int i : arr) {
System.out.print(i+" ");
}
}
}
插入排序
- 将索引0-N的看做是有序的,将索引N+1之后的数据看做是无序的
- 遍历无序的数据,将无序的数据插入到有序的数据的适当位置中,小的放左边,大和相等的放右边
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e8d99d7fd54d45618539ed7e1d0d7bae.gif)
具体代码实现:
public class Insert {
public static void main(String[] args) {
int[] arr = {1, 2, 5, 3, 4, 2, 8, 7};
int startIndex = -1;
for (int i = 0; i < arr.length; i++) {
if(arr[i+1] < arr[i]) {
startIndex = i+ 1;
break;
}
}
for (int i = startIndex; i < arr.length; i++) {
int index = i;
while (index > 0 && arr[index-1] > arr[index]) {
int temp = arr[index-1];
arr[index-1] = arr[index];
arr[index] = temp;
index--;
}
}
for (int i : arr) {
System.out.print(i+" ");
}
}
}
快速排序
- 从数据中选择一个元素作为“基准数”,一般是走边的第一个数据
- 利用两个指针,一个从前往后,一个从后往前
- 先从后往前,寻找比基准数小的数据
- 再从前往后,寻找比基准数大的数据
- 交换找到的两个数据
- 直到两个数据相遇
- 将当前指针的数据与基准数进行交换位置,进行基准数归位
- 第一轮结束后,基准数左边都是基准数小的数据,右边是比基准数大的数据
- 将基准数左边看做一个序列,右边也看做一个序列,按照上面的规则进行递归排序。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/949cf8696df14629a85750f152c958a9.gif)
具体代码实现:
public class Quick {
public static void main(String[] args) {
int[] arr = {11, 22, 17, 5, 13, 4, 12, 18, 7};
quickSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + " ");
}
}
public static void quickSort(int[] arr, int left, int right) {
int start = left;
int end = right;
if (start > end) {
return;
}
int baiseData = arr[start];
while (start != end) {
while (true) {
if (end <= start || arr[end] < baiseData) {
break;
}
end--;
}
while (true) {
if (end <= start || arr[start] > baiseData) {
break;
}
start++;
}
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
int temp = arr[left];
arr[left] = arr[start];
arr[start] = temp;
quickSort(arr, left, start - 1);
quickSort(arr, start + 1, right);
}
}