如何通過可變數組ArrayList 以及分治法實現快速排序
代碼如下:
import java.util.ArrayList;
import java.util.Scanner;
//快速排序
//挖坑填數+分治
public class KuaiSuPaiXu {
public static void main(String[] args) {
// TODO Auto-generated method stub
// int a[]= {16,32,14,53,38,56,8,65,49,45};
// quickSort(a);
Scanner get=new Scanner(System.in);
ArrayList<Integer> al=new ArrayList<>();
while(get.hasNext()) {
int num=get.nextInt();
if(num==-1) {
break;
}
al.add(num);
}
int b[]=new int[al.size()];
for(int i=0;i<al.size();i++) {
b[i]=al.get(i);
}
quickSort(b);
get.close();
}
public static void sort(int a[], int low, int high) {
if(low>=high)
return ;
int i=low;
int j=high;
int key=a[i];
while(i<j) {
while(i<j && a[j]>=key)//從右往左找到第一個小於key的數
j--;
if(i<j)
a[i++]=a[j];
while(i<j && a[i]<=key)//從左往右找到第一個大於key的數
i++;
if(i<j)
a[j--]=a[i];
}
a[i]=key;
sort(a,low,i-1);
sort(a,i+1,high);
}
public static void quickSort(int a[]) {
// TODO Auto-generated method stub
sort(a, 0, a.length-1);
for (int i : a) {
System.out.print(i+" ");
}
}
}
運行結果截圖: