排序算法之快速排序
快速排序
快速排序是排序算法中经常会见到的算法,相较于冒泡排序,快速排序时间复杂度上要低。
快速排序的平均复杂度为O(nlog2n),最差复杂度为O(N2),空间复杂度为O(1)。
快速复杂的思想在于选取数组的一个值最为中间值,分别从右遍历找到小于中间值的元素放到左边,从左遍历找到大于中间值的元素放到右边,以此得到一个初步满足要求的数组,再把左右个元素再次进行大小移动,通过递归的方式一次次排序 ,直到数组顺序正确,同时跳出递归或者循环的条件始终是左指针小于右指针。
废话不多说,上代码:
public QuickSort{
public static void main(String[] args) {
int[] nums ={5,4,3,2,1};
int left = 0;
int right = nums.length-1;
quicksort(nums, left, right);
System.out.println(Arrays.toString(nums));
}
public static void quicksort(int[] nums, int left, int right){
if(left<right) {
int middle = sort(nums, left, right);
quicksort(nums, left, middle - 1);
quicksort(nums, middle + 1, right);
}
}
static int sort(int[] nums,int left,int right){
int temp = nums[left];
while(left<right){
while(left<right && nums[right] > temp){
right--;
}
nums[left] = nums[right];
while(left<right && nums[left] < temp){
left++;
}
nums[right] = nums[left];
}
nums[left] = temp;
return left;
}
}
浙公网安备 33010602011771号