快排思路:
快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:
- 从数列中挑出一个元素,称为 “基准”(pivot),一般先取第一个元素作为基准;
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
代码
public static void main(String[] args) {
int[] arr = {3,10,7,0,6,8,9,8};
int len =arr.length-1;
QuickSort(arr, 0, len);
for(int i=0;i<=len;i++) {
System.out.print(arr[i]);
}
}
public static void QuickSort(int[] arr,int left,int right) {
if(right>left) {
int pivot =partition(arr, left, right);
QuickSort(arr, left, pivot-1);
QuickSort(arr, pivot+1, right);
}
}
public static int partition(int[] arr,int left,int right) {
int index=left+1;
int temp = arr[left];
for(int i=left+1;i<=right;i++) {
if(arr[i]<=temp) {
swap(arr,i,index);
index++;
}
}
swap(arr, left, index-1);
return index-1;
}
public static void swap(int[] arr,int a,int b) {
int t =arr[a];
arr[a]=arr[b];
arr[b]=t;
}