随机输入10个数字,请完成快速排序:
快速排序之所以比较快,是因为与冒泡排序相比,每次的交换时跳跃式的,每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是O ( n 2 ) O(n^2)O(n 2),它的平均时间复杂度为O ( n log 2 n ) O(n\log_2n)O(nlog 2 n)。
代码:
import java.util.Arrays;
import java.util.Scanner;
public class 第一题 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int arr[]=new int[10];
for(int i=0;i<10;i++){
arr[i]=sc.nextInt();
}
Quick_Sort(arr,0,arr.length-1);
System.out.print("快速排序:");
for(int i:arr){
System.out.print(i+" ");
}
}
public static void Quick_Sort(int arr[], int begin, int end){
if(begin > end)
return;
int i = begin;
int j = end;
while(i != j){
while(arr[j] >= arr[begin] && j > i)
j--;
while(arr[i] <= arr[begin] && j > i)
i++;
if(j > i){
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
int temp = arr[begin];
arr[begin] = arr[i];
arr[i] = temp;
Quick_Sort(arr, begin, i-1);
Quick_Sort(arr, i+1, end);
}
}