面试算法:快速排序
2023-12-28 16:56:48
题目
快速排序是一种非常高效的算法,从其名字可以看出这种排序算法最大的特点就是快。当表现良好时,快速排序的速度比其他主要对手(如归并排序)快2~3倍。
分析
快速排序的基本思想是分治法,排序过程如下:在输入数组中随机选取一个元素作为中间值(pivot),然后对数组进行分区(partition),使所有比中间值小的数据移到数组的左边,所有比中间值大的数据移到数组的右边。接下来对中间值左右两侧的子数组用相同的步骤排序,直到子数组中只有一个数字为止。
题目
public class Test {
public static void main(String[] args) {
int[] nums = {4, 1, 5, 3, 6, 2, 7, 8};
int[] result = sortArray(nums);
for (int item : result) {
System.out.println(item);
}
}
public static int[] sortArray(int[] nums) {
quicksort(nums, 0, nums.length - 1);
return nums;
}
public static void quicksort(int[] nums, int start, int end) {
if (start < end) {
int pivot = partition(nums, start, end);
quicksort(nums, start, pivot - 1);
quicksort(nums, pivot + 1, end);
}
}
public static int partition(int[] nums, int start, int end) {
int random = new Random().nextInt(end - start + 1) + start;
swap(nums, random, end);
int small = start - 1;// 把所有遇到的小元素全部放到头部
for (int i = start; i < end; i++) {
if (nums[i] < nums[end]) {
small++;
swap(nums, small, i);
}
}
small++;
swap(nums, small, end);
return small;
}
private static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
文章来源:https://blog.csdn.net/GoGleTech/article/details/135270678
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!