「数据结构与算法」基础排序
「数据结构与算法」基础排序
【「数据结构与算法」基础排序】交换排序:
- 快速排序
- 冒泡排序
思路:
在数组中找一个元素(节点),比它小的放在节点的左边,比它大的放在节点右边。一趟下来,比节点小的在左边,比节点大的在右边。
不断执行这个操作...
实现:
public static void quickSort(int[] array, int l, int r) {
int leftPos = l;
int rightPos = r;
// 支点
// 该值可以选任意值
int pivot = array[(l + r) / 2];
// 支点左边的值全部小于支点
// 支点右边的值全部大于支点
while (leftPos <= rightPos) {
// 从左开始,寻找比支点大的位置
while (array[leftPos] < pivot) {
leftPos++;
}// 从右开始,寻找比支点小的位置
while (array[rightPos] > pivot) {
rightPos--;
}if (leftPos <= rightPos) {
// 交换左右数值
int temp = array[leftPos];
array[leftPos] = array[rightPos];
array[rightPos] = temp;
leftPos++;
rightPos--;
}
}if (rightPos > l) {
quickSort(array, l, rightPos);
}if (leftPos < r) {
quickSort(array, leftPos, r);
}
}
冒泡排序
思路:
俩俩交换,大的放在后面,第一次排序后最大值已在数组末尾
因为俩俩交换,需要 n-1 趟排序,比如10个数,需要9趟排序
实现:
public static void popupSort(int[] array) {
// 每一轮把最大的值像冒泡泡一样冒到最后一位
for (int i = 0;
i < array.length - 1;
i++) {
// 判断是否修改
boolean isChange = false;
for (int j = 0;
j < array.length - 1 - i;
j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
isChange = true;
}
}// 若无修改代表数组已经有序
if (isChange == false) {
break;
}
}
}
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 八、「料理风云」
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 「#1-颜龙武」区块链的价值是什么()
- 我和你之前距离