三向切分快速排序
使用场景
算法思路
算法实现
public void sort(int[] nums) {
sort(nums, 0, nums.length - 1);
}
private void sort(int[] nums, int left, int right) {
if (left < right) {
// 选择首元素作为比较标志
int temp = nums[left];
// 设置两个指针指向与temp相同的元素范围
int left_p = left;
int right_p = right;
for (int i = left + 1; i <= right_p; ) {
// 根据比较结果进行元素交换
if (nums[i] < temp) {
swap(nums, left_p, i);
left_p++;
i++;
} else if (nums[i] > temp) {
swap(nums, i, right_p);
right_p--;
} else {
i++;
}
}
// 对两侧元素分别进行排序
sort(nums, left, left_p - 1);
sort(nums, right_p + 1, right);
}
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}经典例题
最后更新于