function [ rank_vecter ] = ranking( val_vecter,rank_mode,sort_mode )
%函数ranking将val_vecter向量中的值进行排序，返回各值的排序
% val_vecter: 输入向量，本函数就是要对此向量中的值进行排序
% rank_mode:   若rank_mode='max',则相同值拥有相同的最高的排序值
%              若rank_mode='avg',则相同值拥有相同的平均排序值
% sort_mode:   若sort_mode='descend',则最大值排序为1
%              若sort_mode='ascend',则最小值排序为1
    if nargin<3
        sort_mode = 'descend';
    end
    if nargin<2
        rank_mode = 'max';
    end
    
    %% main
    L = length(val_vecter);
    val_sort = sort(val_vecter,sort_mode);
    val_vecter_1 = val_vecter;
    rank_vecter = zeros(size(val_sort));
    cnt = 0;
    while 1
        ii = cnt+1;
        idx_max = (val_vecter_1==val_sort(ii));
        if sum(idx_max)==1
            rank_vecter(idx_max) = ii;
        else
            if strcmp(rank_mode,'max')
                rank_vecter(idx_max) = ii;
            elseif strcmp(rank_mode,'avg')
                rank_vecter(idx_max) = sum(ii:(ii+sum(idx_max)-1))/sum(idx_max);
            else
                error('error with mode1 setting!');
            end
        end
        val_vecter_1(idx_max) = NaN;
        cnt = cnt + sum(idx_max);
        if cnt == L
            break;
        end
    end

end

