package sort;
import java.util.Arrays;
/**
* Created by lijie35 on 2020-01-17 12:31 PM .
*/
public class Quicksort {
public static void main(String[] args) {
//int[] arr = {3, 45, 7,6, 9, 2};
int arr[] = new int[]{3,3,3,7,9,122344,4656,34,34,4656,5,6,7,8,9,343,57765,23,12321};
Quicksort.sort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
/**
* 原理是 选取一个锚点p,比p小的方左边,大的放右边
* <p>
* i j
* p
* [3, 45, 7, 6, 9, 2]
* <p>
* nlogn
*/
public static int[] sort(int[] arr, int start, int end) {
int i = start, j = end, p = arr[start];
//如果左边指针和右边没有相遇
while (i < j) {
//从右边开始查,找到比p大的为止
while (i < j && arr[j] > p) {
j--;
}
while (i < j && arr[i] < p) {
i++;
}
System.out.println(Arrays.toString(arr));
if (i < j && arr[i]==arr[j]) {
//交换
i++;
}else{
swap(arr, i, j);
}
// if ((arr[i]==arr[j])&&(i<j)) {
// i++;
// } else {
// swap(arr, i, j);
// }
}
if (i - 1 > start) arr = sort(arr, start, i - 1);
if (j + 1 < end) arr = sort(arr, j + 1, end);
return arr;
}
private static void swap(int[] arr, int a, int b) {
int tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
}
快排算法
最新推荐文章于 2022-05-26 23:47:50 发布