主页 > 创业  > 

LeetCode--快速排序

LeetCode--快速排序

文章目录 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); }
标签:

LeetCode--快速排序由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“LeetCode--快速排序