快速排序
快速排序基本思路
1,取数组中的一个数(一般为最左边的数)作为基准点
2,从数组的最右边开始取值与基准点进行比较,取比基准点小(大)的值
3,从数组的最左边开始取值与基准点进行比较,取比基准点大(小)的值
4,将两个值互换位置,然后继续取值,直到两者相遇(不需要都取到值),然后将基准点与相遇点的值互换
5,这个时候基准点就已经归位了,左边是比他小(大)的值,右边是比他大(小)的值。
6,以基准点为分割线将数组分为两块,分别重复进行上述的操作,直到所有值归位。
代码
public class QuickSort{
public static void quickSort (int[] arr, int left,int right){
if(left > right){
return;
}
int i,j,temp,t;
i = left;
j = right;
temp = arr[left];
while(i<j){
while(temp >= arr[j] && i<j){
j--;
}
while(temp <= arr[i] && i<j){
i++;
}
if(i<j){
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[left] = arr[i];
arr[i] = temp;
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}
public static void main(String[] args){
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arr, 0, arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}