多个字段排序的代码实现

Lamdba 发布于 2016/10/17 08:59
阅读 356
收藏 0

我百度多字段排序时,都是现成的软件。我自己实现了两个字段的排序算法,但是对于多个字段,我暂时没有好的思路。以下是我对两个字段排序的实现:

public class TwoFacSort {

    public static void main(String[] args) {
        int[] requestTimes = {0,4,2,5};
        int[] serviceTimes = {7,1,4,4};
        System.out.println(getAvgWait(requestTimes, serviceTimes));
    }
    public static float getAvgWait(int[] requestTimes, int[] serviceTimes){
        int[] waitings = new int[serviceTimes.length];
        boolean[] assigneds = new boolean[requestTimes.length];
        int totalTime = 0;
        waitings[0] = requestTimes[0];
        assigneds[0] = true;
        totalTime += serviceTimes[0];
        for(int i = 1; i < serviceTimes.length; i++){
            int index = getIndexOfOptMin(requestTimes,serviceTimes,assigneds);
            waitings[index] = totalTime - requestTimes[index];
            totalTime += serviceTimes[index];
            assigneds[index] = true;
        }
        int sum = 0;
        for(int i = 0; i < waitings.length; i++){
            sum += waitings[i];
        }
        return (float)1.0*sum/serviceTimes.length;
    }
    public static  int getIndexOfOptMin(int[] requestTimes, int[] serviceTimes, boolean[] assigneds){
        int min = 0;
        int count = 0;
        boolean flag = false;
        boolean[] indexOfChoosed = new boolean[serviceTimes.length];
        for(int i = 0; i < serviceTimes.length; i++){
            if(!flag && !assigneds[i]){
                min = serviceTimes[i];
                count = 1;
                flag = true;
                indexOfChoosed[i] = true;
            } else {
                if(!assigneds[i]){
                    if(serviceTimes[i] == min){
                        count++;
                        indexOfChoosed[i] =  true;
                    } else if(serviceTimes[i] < min){
                        indexOfChoosed = new boolean[serviceTimes.length];
                        min = serviceTimes[i];
                        count = 1;
                        indexOfChoosed[i] = true;
                    }
                }
            }
        }
        int returnIndex = 0;
        if(count < 2){
            for(int i = 0; i < indexOfChoosed.length;i++){
                if(indexOfChoosed[i]==true) return i;
            }
        } else {
            int fmin = 0;
            flag = false;
            for(int i = 0; i < indexOfChoosed.length;i++){
                if(!flag && indexOfChoosed[i]==true){
                    fmin = requestTimes[i];
                    returnIndex = i;
                    flag = true;
                } else {
                    if(indexOfChoosed[i]==true){
                        if(requestTimes[i] < fmin){
                            fmin = requestTimes[i];
                            returnIndex = i;
                        }
                    }
                }
            }
        }
        return returnIndex;
    }
}

加载中
0
求是科技
求是科技
不大明白你说的多个字段指的是?
0
太黑_thj
太黑_thj
多个字段排序,肯定有优先级,即第一个字段排完,然后在第二个字段排,具体的实现逻辑有点递归的思路,就是先根据第一个字段进行排序,然后根据第一个字段进行分组,接下来根据第二个字段,将第一个字段分完的每个组进行排序,然后再根据第二个字段进行分组,然后第三个字段,以此类推,直到完成所有字段的排序,然后将排好的各个组数据拼接起来
0
szwx855
szwx855

楼主可以看看数据结构的书。。有冒泡排序,递增排序,还有二分排序。多个字段其实也就是多个数字。

1,2,2,5,9,10,5,111。

最平常的做法是这样:,不过我看过这样的..性能快点。。

a = 0 ,b=1

a = a^b

b = a^b

a = a^b

0
kakai
kakai
不明所意,排序就是排序,为什么要说多个字段
返回顶部
顶部