先说下快速排序的思路:选择数组中一个数值pivot,然后从数组两头开始向中间遍历,并与pivot比较,然后进行换子操作,第一次排序执行完了之后,数组以pivot为界,分成了两部分,左边都是比它小的数值,右边都是大于等于它的数值,然后分别对两部分进行递归排序,最终汇总结果,下面是本人根据思路自己写的粗鲁实现,后面是百度百科的资料,它上面的java实现写的很棒,建议大家可以看一看。
本人自己写的拙劣代码
public static void main(String[] args) {
int[] arr = {4, 2, 1, 5, 6, 7, 8, 3, 9, 10};
int[] sortedArr = sort(arr);
List list = convert(sortedArr);
String str = String.join(",", list);
System.out.println(str);
}
public static int[] sort(@Nonnull int[] arr) {
int pivot = arr[0];
int length = arr.length;
if (length == 1) return arr;
int midIndex = 0;
for (int i=length-1; i>0; i--) {
if (arr[i] < pivot) {
int j=0;
for (; j<i; j++) {
if (arr[j] > pivot) {
int iv = arr[i];
int jv = arr[j];
arr[i] = jv;
arr[j] = iv;
break;
}
}
if (j == i) {
int jv = arr[j];
arr[0] = jv;
arr[j] = pivot;
midIndex = i;
break;
}
}
}
int[] lowArr = ArrayUtils.subarray(arr, 0, midIndex + 1);
int[] highArr = ArrayUtils.subarray(arr, midIndex + 1, length);
int[] leftArr = sort(lowArr);
int[] rightArr = sort(highArr);
return ArrayUtils.addAll(leftArr, rightArr);
}
public static List convert(int[] arr) {
List list = Lists.newArrayList();
for (int i : arr) {
list.add(i + "");
}
return list;
}
image.png