当前位置: 首页> 财经> 金融 > 快速排序总结

快速排序总结

时间:2025/8/14 1:07:59来源:https://blog.csdn.net/hf19931101/article/details/139770712 浏览次数:0次

标准模版

交换法

单函数法

public static void quickSort(int[] arr, int start, int end) {if (start >= end) {return;}int idx = start;int pivot = arr[idx];int left = start, right = end;while (left < right) {while (left < right && arr[right] >= pivot) {right--;}while(left < right && arr[left] <= pivot) {left++;}swap(arr, left, right);}// 从此行开始,left == rightswap(arr, idx, left);if (start < left) {quickSort(arr, start, left - 1);}if (right < end) {quickSort(arr, right + 1, end);}
}

双函数法

/*** 快速排序* <p>* 这一层的逻辑基本不会变,注意递归退出条件** @param nums* @param start* @param end*/
public static void quickSort(int[] nums, int start, int end) {if (start < end) {int index = partition(nums, start, end);quickSort(nums, start, index - 1);quickSort(nums, index + 1, end);}
}/*** 交换法,即Hoare法** @param arr* @param start* @param end* @return*/
public static int partition(int[] arr, int start, int end) {int index = start;int pivot = arr[index];int left = start, right = end;while (left < right) {// 让right找比pivot小的数while (right > left && arr[right] >= pivot) {right--;}// 让left找比pivot大的数while (left < right && arr[left] <= pivot) {left++;}// 让left与right这两个数进行交换swap(arr, left, right);}// 将基准值放到合适的位置swap(arr, index, left);// 返回基准下标return left;
}private static void swap(int[] nums, int left, int right) {int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;
}

填坑法

【推荐】单函数法

代码量最少,且不需要swap函数;

public static void quickSort(int[] arr, int start, int end) {if (start >= end) {return;}int idx = start;int pivot = arr[idx];int left = start, right = end;while (left < right) {while (left < right && arr[right] >= pivot) {right--;}arr[left] = arr[right];while(left < right && arr[left] <= pivot) {left++;}arr[right] = arr[left];}// 从此行开始,left == rightarr[left] = pivot;if (start < left) {quickSort(arr, start, left - 1);}if (right < end) {quickSort(arr, right + 1, end);}
}

双函数法

/*** 快速排序* <p>* 这一层的逻辑基本不会变,注意递归退出条件** @param nums* @param start* @param end*/
public static void quickSort(int[] nums, int start, int end) {if (start < end) {int index = partition(nums, start, end);quickSort(nums, start, index - 1);quickSort(nums, index + 1, end);}
}/*** 填坑法** @param arr* @param start* @param end* @return*/
public static int partition(int[] arr, int start, int end) {int index = start;int pivot = arr[index];int left = start, right = end;while (left < right) {// 找到一个比基准小的值while (left < right && arr[right] >= pivot) {right--;}// 放到左边arr[left] = arr[right];// 找到一个比基准大的值while (left < right && arr[left] <= pivot) {left++;}// 放到右边arr[right] = arr[left];}// 基准放到位置上arr[left] = pivot;return left;
}

参考文档

快速排序(三)——hoare法

https://blog.csdn.net/fax_player/article/details/135719674

快速排序(四)——挖坑法,前后指针法与非递归

https://blog.csdn.net/fax_player/article/details/135750747

七大排序算法——快速排序,通俗易懂的思路讲解与图解(完整Java代码)

https://blog.csdn.net/The_emperoor_man/article/details/131706776

关键字:快速排序总结

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: