先說(shuō)下快速排序的思路:選擇數(shù)組中一個(gè)數(shù)值pivot秫舌,然后從數(shù)組兩頭開(kāi)始向中間遍歷,并與pivot比較,然后進(jìn)行換子操作马澈,第一次排序執(zhí)行完了之后贸弥,數(shù)組以pivot為界窟坐,分成了兩部分,左邊都是比它小的數(shù)值绵疲,右邊都是大于等于它的數(shù)值哲鸳,然后分別對(duì)兩部分進(jìn)行遞歸排序,最終匯總結(jié)果盔憨,下面是本人根據(jù)思路自己寫(xiě)的粗魯實(shí)現(xiàn)徙菠,后面是百度百科的資料,它上面的java實(shí)現(xiàn)寫(xiě)的很棒郁岩,建議大家可以看一看婿奔。
本人自己寫(xiě)的拙劣代碼
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