大家好我是苏麟,今天带来快速排序 .
单边循环 (lomuto分区) 要点 :
B站解析 :
基础算法-210-排序算法-单边快排_哔哩哔哩_bilibili
代码 :
class Solution {
public int[] sortArray(int[] nums) {
int length = nums.length;
sort(nums,0,length - 1);
return nums;
}
public void sort(int[] nums,int left,int right){
if(left >= right){
return;
}
int i = qicke(nums,left,right);
sort(nums,left,i - 1);
sort(nums,i + 1,right);
}
public int qicke(int[] nums,int left,int right){
int i = left;
int j = left;
int p = nums[right];
while(j < right){
if(nums[j] < p){
if(i != j){
swap(nums,i,j);
}
i++;
}
j++;
}
swap(nums,i,right);
return i;
}
public void swap(int[]nums,int i,int j){
int temp = nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
双边循环要点 :
B站解析 :
基础算法-211-排序算法-双边快排_哔哩哔哩_bilibili
解析 :
class Solution {
public int[] sortArray(int[] nums) {
int length = nums.length;
sort(nums,0,length - 1);
return nums;
}
public void sort(int[] nums,int left,int right){
if(left >= right){
return;
}
int i = qicke(nums,left,right);
sort(nums,left,i - 1);
sort(nums,i + 1,right);
}
public int qicke(int[] nums,int left,int right){
int i = left;
int j = right;
int p = nums[left];
while(i < j){
while(i < j && nums[j] > p){
j--;
}
while(i < j && nums[i] <= p){
i++;
}
swap(nums,i,j);
}
swap(nums,i,left);
return i;
}
public void swap(int[]nums,int i,int j){
int temp = nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
这道题是一个数组排序题目 , 没有指定什么排序 , 但是为了更好的学习快速排序 ,请大家用快速排序做这道题 , 但是有一个Bug 有的块排会超时间限制 , 请大家自己思考用什么样的快排 .
题目 :
LeetCode : 912 排序数组
912. 排序数组
分析 :
根据上面写出快排
解析 :
class Solution {
public int[] sortArray(int[] nums) {
int length = nums.length;
quickSort(nums,0,length - 1);
return nums;
}
public void quickSort(int[] array,int start,int end){
if (start >= end) {
return;
}
int left = start, right = end;
int pivot = array[(start + end) / 2];
while (left <= right) {
while (left <= right && array[left] < pivot)
{
left++;
}
while (left <= right && array[right] > pivot)
{
right--;
}
if (left <= right){
int temp = array[left];
array[left] = array[right];
array[right] = temp;
left++;
right--;
}
}
quickSort(array, start, right);
quickSort(array, left, end);
}
}
这期就到这里 , 下期见!