快速排序

来源:互联网 发布:网络管理需要掌握什么 编辑:程序博客网 时间:2024/05/16 11:18
 /* 快速排序 * @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;}
0 0
原创粉丝点击