首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

请教java中sort 大数据的含义

2012-03-17 
请问java中sort 大数据的含义代码为:privatestaticvoidsort1(intx[],intoff,intlen){//Insertionsortonsma

请问java中sort 大数据的含义
代码为:
private   static   void   sort1(int   x[],   int   off,   int   len)   {
//   Insertion   sort   on   smallest   arrays
if   (len   <   7)   {
        for   (int   i=off;   i <len+off;   i++)
for   (int   j=i;   j> off   &&   x[j-1]> x[j];   j--)
        swap(x,   j,   j-1);
        return;
}

//   Choose   a   partition   element,   v
int   m   =   off   +   (len   > >   1);               //   Small   arrays,   middle   element
if   (len   >   7)   {
        int   l   =   off;
        int   n   =   off   +   len   -   1;
        if   (len   >   40)   {                 //   Big   arrays,   pseudomedian   of   9
int   s   =   len/8;
l   =   med3(x,   l,           l+s,   l+2*s);//特别是这个部分,//到底是要找什么值啊
m   =   med3(x,   m-s,       m,       m+s);
n   =   med3(x,   n-2*s,   n-s,   n);
        }
        m   =   med3(x,   l,   m,   n);   //   Mid-size,   med   of   3
}
int   v   =   x[m];

//   Establish   Invariant:   v*   ( <v)*   (> v)*   v*
int   a   =   off,   b   =   a,   c   =   off   +   len   -   1,   d   =   c;
while(true)   {
        while   (b   <=   c   &&   x[b]   <=   v)   {
if   (x[b]   ==   v)
        swap(x,   a++,   b);
b++;
        }
        while   (c   > =   b   &&   x[c]   > =   v)   {
if   (x[c]   ==   v)
        swap(x,   c,   d--);
c--;
        }
        if   (b   >   c)
break;
        swap(x,   b++,   c--);
}

//   Swap   partition   elements   back   to   middle
int   s,   n   =   off   +   len;
s   =   Math.min(a-off,   b-a     );     vecswap(x,   off,   b-s,   s);
s   =   Math.min(d-c,       n-d-1);     vecswap(x,   b,       n-s,   s);

//   Recursively   sort   non-partition-elements
if   ((s   =   b-a)   >   1)
        sort1(x,   off,   s);
if   ((s   =   d-c)   >   1)
        sort1(x,   n-s,   s);
        }
private   static   void   vecswap(int   x[],   int   a,   int   b,   int   n)   {
for   (int   i=0;   i <n;   i++,   a++,   b++)


        swap(x,   a,   b);
        }

private   static   void   swap(int   x[],   int   a,   int   b)   {
int   t   =   x[a];
x[a]   =   x[b];
x[b]   =   t;
        }

private   static   int   med3(int   x[],   int   a,   int   b,   int   c)   {
return   (x[a]   <   x[b]   ?
(x[b]   <   x[c]   ?   b   :   x[a]   <   x[c]   ?   c   :   a)   :
(x[b]   >   x[c]   ?   b   :   x[a]   >   x[c]   ?   c   :   a));
        }


[解决办法]
其实就算为了防止快排退化。
分别在前面,中间,后面各取3个数的中位数,然后再取总的3个数的中位数。使得快排时的分割尽量平衡。

热点排行