快速排序

    xiaoxiao2021-03-25  163

    /* 快速排序 * @param datas * @param left * 快速排序的起始位置 * @param right * 快速排序的终止位置 * @author sunyanqiang */ public static void qiuckSort(int[] datas,int left,int right){ if (left < right) { //目的在于找中间值的下标。 int middle = findMiddle(datas,left,right); //对左一半进行快排 qiuckSort(datas, left, middle - 1); //对右一半进行快排 qiuckSort(datas, middle + 1, right); }else { return; } } /** * 找中间值的下标 * @param datas * @param left * @param right * @return * @author sunyanqiang */ private static int findMiddle(int[] datas, int left, int right) { //定义一些变量 int leftIndex = left;//左指针 int rightIndex = right - 1;//右指针 int temp = datas[right];//参照物 int middle = 0;//中间值的下标 while(true){ //先写个死循环,到了要跳出的时候,break。 //左指针从左往右找数据,找比参照物大的,前提是不能越界(<right - 1) while(leftIndex < right && datas[leftIndex] <= temp){ //一直找数据 leftIndex ++; } //右指针从右往左找数据,找比参照物小得 while(rightIndex >= left && datas[rightIndex] >= temp){ //一直找数据 rightIndex --; } //判断左右指针有没有交叉 if (leftIndex < rightIndex) { //没有交叉 //交换左右指针位置上的值 change(datas, leftIndex, rightIndex); //继续找数据 continue; }else { //交叉了 middle = leftIndex; //交换左指针位置的值和参照物的值 change(datas, leftIndex, right); //跳出循环 break; } } return middle; }
    转载请注明原文地址: https://ju.6miu.com/read-2055.html

    最新回复(0)