关于排序算法的疑问,想知道的部分卸载注释里了,注解中如果有理解错误的话希望可以之指正,主要的问题是关于位置交换那里
package 排序算法;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
QuickSort quickSort = new QuickSort();
int[] intArr= {2,1};
int[] ints = quickSort.quickSort(intArr, 0, intArr.length - 1);//对数组的第一个元素到最后一个元素进行排序
}
private int[] quickSort(int[] arr, int left, int right) { //left = 0,right = arr.length-1
if (left < right) { //判断是否是该数组或者临时数组的最后一个元素
int partitionIndex = partition(arr, left, right);
quickSort(arr, left, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, right);
}
return arr;
}
private int partition(int[] arr, int left, int right) {
// 设定基准值(pivot)
int pivot = left;
int index = pivot + 1; //基准点的下一个元素下标
for (int i = index; i <= right; i++) { //基准点跟他右边的所有元素进行比较
if (arr[i] < arr[pivot]) { //将基准点放在他适合的位置,即左边的都是小于基准点的,右边的都是等于或者大于基准点的
swap(arr, i, index);
index++; //表示下一轮换位置从当前已经更换的位置开始
}
} //到这里第一轮的初始基准点已经到了正确的位置
System.out.printf(Arrays.toString(arr)); //为什么这里是已经排序好的
swap(arr, pivot, index - 1); //这里为什么还要跟自己交换位置呢 ,不是很理解,这里的arrdubug的时候看是没有排序的
return index - 1;
}
private void swap(int[] arr, int i, int j) { //
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}