中小企业网站制作方法北京seo营销公司
文章目录
- 1 排序原理
- 2 代码实现
1 排序原理
quickSort(int[] arr, int left, int right)
参数描述
- arr: 待排序的数组
- left: 排序的左边位置
- right: 排序的右边位置
排序步骤:
- 先选取左边节点的数据作为 pivot
- 从右边开始, 向左遍历节点数据, 在满足
right > left
条件前提下:
如果
节点数据 > pivot
继续向左移动
如果节点数据 <= pivot
则把当前节点的数据赋值到 left 节点, 然后停止右边遍历, 开始左边遍历
- 从左边开始, 向右遍历节点数据, 在满足
left > right
条件前提下:
如果
节点数据 < pivot
继续向右移动
如果节点数据 >= pivot
则把当前节点的数据赋值到 right 节点, 然后停止左边遍历, 开始右边遍历
- 当 left 和 right 重合后, 此次遍历结束, 把 pivot 赋值到重合节点, pivot节点左边为左数组, 右边的为右数组
对左数组递归调用执行 1,2,3 步骤
对右数组递归调用执行 1,2,3 步骤
- 完成快速排序
2 代码实现
public static void main(String[] args) { int[] arr = {5, 3, 8, 5, 4, 2}; quickSort(arr, 0, arr.length - 1); System.out.println("排序后的数组:" + Arrays.toString(arr));
} public static void quickSort(int[] arr, int left, int right) { if (left >= right) { return; } // 选取最左边的元素作为枢轴 int pivot = arr[left]; int i = left; int j = right; while (i < j) { // 先从右边开始找小于枢轴的元素 while (i < j && arr[j] >= pivot) { // 如果没有找到, 就继续往左边找 j--; } // 在右边找到小于枢轴的元素后, 将其赋值给左边位置的元素 arr[i] = arr[j]; // 然后从左边开始找大于枢轴的元素 while (i < j && arr[i] <= pivot) { // 如果没有找到, 就继续往右边找 i++; } // 在左边找到大于枢轴的元素后, 将其赋值给右边位置的元素 arr[j] = arr[i]; } // 当 left == right 时, 把 pivot 赋值给 arr[i] arr[i] = pivot; // 递归调用 // 对 pivot 位置左边进行快速排序 quickSort(arr, left, i - 1); // 对 pivot 位置右边进行快速排序 quickSort(arr, i + 1, right);
}