思想
クイックソート、要素を選択し、次いで交換要素を介して、選択された要素は、右の要素がそれより大きいよりも小さいことを保証するために残されます。各操作の後、要素の位置の位置は、選択された一種です。
あなたがダウンして読んでいるあなたが立つ場所を複数の人物の身長順列と同様、短いあなたよりも人の前で、あなたより背が高いの後ろの人は、あなたは、とにかく、彼らが投げるか、移動することはできませんそして彼らは、ソートも、あなたはまだこの位置に立ちます。
実現
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] nums = {5, 12, 5, 7, 1, 4, 7, 8, 9};
quickSort(nums, 0, nums.length-1);
System.out.println(Arrays.toString(nums));
}
public static void quickSort(int[] nums, int start, int end){
if(start>=end) return ;
int mid = partition(nums, start, end);
quickSort(nums, start, mid-1);
quickSort(nums, mid+1, end);
}
public static int partition(int[] nums, int start, int end){
int p_value = nums[start];
int i = start, j = end+1;
while(true){
while(nums[++i]<p_value) if(i>=end) break;
while(nums[--j]>p_value) if(j<=start) break;
if(i>=j) break;
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
int temp = nums[j];
nums[j] = nums[start];
nums[start] = temp;
return j;
}
}
複雑
平均時間の複雑さのクイックドレインはNlogNです。スペースの複雑さはO(1)であります