凉白开丶 2022-07-27 17:27 采纳率: 0%
浏览 29

关于排序算法的疑问,想知道的部分卸载注释里了

关于排序算法的疑问,想知道的部分卸载注释里了,注解中如果有理解错误的话希望可以之指正,主要的问题是关于位置交换那里

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;
}

}

  • 写回答

2条回答 默认 最新

  • 於黾 2022-07-27 17:38
    关注

    partition只是其中一个步骤
    你不要孤立的看问题

    评论

报告相同问题?

问题事件

  • 修改了问题 7月27日
  • 创建了问题 7月27日

悬赏问题

  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)