List
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode leftDummpy = new ListNode(0);
ListNode rightDummpy = new ListNode(0);
ListNode left = leftDummpy,right = rightDummpy;
while(head != null){
if(head.val < x){
left.next = head;
left = head;
}
else{
right.next = head;
right = head;
}
head = head.next;
}
//连接
right.next = null;
left.next = rightDummpy.next;
return leftDummpy.next;
}
}
Array
public void quickSort(int[] nums,int start,int end){
if (start >= end) return;
//conquer
int left = start,right = end-1;
int mid = nums[end];
while(left < right){
while(left < right && nums[left] <= mid)
left ++;
while(left < right && mid <= nums[right])
right --;
swap(nums,left,right);
}
if(nums[left] > mid) swap(nums,left,end);
else {
left++;
swap(nums,left,end);
}
//divide
quickSort(nums,start,left-1);
quickSort(nums,left+1,end);
}