您的位置:程序门 -> c/c++ ->



排序问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


排序问题
发表于:2007-09-09 09:03:18 楼主
我有一个数组double   tmp[3]   =   {2.2,3.2,1.2}
还有一个数组double   tmp_s[3][3]:
tmp_s[0,0]:0.987924
tmp_s[0,1]:0.139131
tmp_s[0,2]:0.068176
对应-> tmp[0]=2.2
tmp_s[1,0]:-0.134119
tmp_s[1,1]:0.988251
tmp_s[1,2]:-0.073292
对应-> tmp[1]=3.2
tmp_s[2,0]:-0.077573
tmp_s[2,1]:0.063263
tmp_s[2,2]:0.994978
对应-> tmp[2]=1.2
  我想实现先对tmp[3]排序从大到小(3.2,2.2,1.2),然后对应的tmp_s的index也相应交换.
变化后:
tmp_s[0,0]:-0.134119
tmp_s[0,1]:0.988251
tmp_s[0,2]:-0.073292
对应-> tmp[0]=3.2
tmp_s[1,0]:0.987924
tmp_s[1,1]:0.139131
tmp_s[1,2]:0.068176
对应-> tmp[1]=2.2
tmp_s[2,0]:-0.077573
tmp_s[2,1]:0.063263
tmp_s[2,2]:0.994978
对应-> tmp[2]=1.2

如何做呢?
发表于:2007-09-09 10:45:541楼 得分:0
算法自己设计了
排序很多函数的
都是基础
stl里面有   c里面也有
也可自己设计
不要偷懒
发表于:2007-09-09 10:49:402楼 得分:0
我觉得利用struct,将tmp与tmp_s对应起来,然后排序,程序应该比较简单。
发表于:2007-09-09 14:09:053楼 得分:0
程序相对比较简单,楼主还是自己写吧,我不把代码附上了
如果实在不行,再求救吧
发表于:2007-09-11 18:14:194楼 得分:0
#include   "stdio.h "
#include   "stdlib.h "
#include   "string.h "
#include   "math.h "

void   main()
{        
        double   tmp_s[3][3];
        double   tmp[]   =   {2.2,   3.2,   1.2};
        double   *tmpbuffer   =   (double   *)malloc(sizeof(tmp)   +   128);
        memset(tmpbuffer,   0,   sizeof(tmp)   +128);
        memcpy(tmpbuffer,   tmp,   sizeof(tmp));

        int   bitmaplow   =   0;
        int   bitmaphigh   =   0;
        int   tmpindex   =   0;

        tmp_s[0][0]   =   0.987924;
        tmp_s[0][1]   =   0.139131;
        tmp_s[0][2]   =   0.068176;

        tmp_s[1][0]   =   -0.134119;
        tmp_s[1][1]   =   0.988251;
        tmp_s[1][2]   =   -0.073292;

        tmp_s[2][0]   =   -0.077573;
        tmp_s[2][1]   =   0.063263;
        tmp_s[2][2]   =   0.994978;

        for(int   i   =   0;   i   <   (sizeof(tmp)/sizeof(double));   i++)
        {
                int   index   =   (int)(tmp[i]   *   10);
                if(index   >   31)
                {
                        bitmaphigh   =   bitmaphigh   ¦   (1 < <index);
                }
                else
                {
                        bitmaplow   =   bitmaplow   ¦   (1 < <index);
                }
        }
       
        memset(tmp,   0,   sizeof(tmp));
        for(int   i   =   32;   i   >   0;   i--)
        {
                int   flag   =   bitmaphigh   &   (1 < <   i);
                if(flag   !=   0)
                {
                        tmp[tmpindex]   =   (i/10)   +   (i%10)*pow(10.0,   -1);
                        tmpindex   ++;
                }
        }
        for(int   i   =   32;   i   >   0;   i--)
        {
                int   flag   =   bitmaplow   &   (1 < <   i);
                if(flag   !=   0)
                {
                        tmp[tmpindex]   =   (i/10)   +   (i%10)*pow(10.0,   -1);
                        tmpindex   ++;
                }
        }
        char   *tmpfirst   =   (char   *)tmp_s;
        char   *tmpsecond   =   tmpfirst   +   sizeof(double)*3;
        char   *tmpthird   =   tmpsecond   +   sizeof(double)*3;
        double   *tmpdouble   =   (double   *)malloc(sizeof(double)   *3   +   128);
        memset(tmpdouble,   0   ,   sizeof(double)   *3   +   128);
       
        int   indexfirst   =   0;
        int   indexsecond   =   0;
        int   indexthird   =   0;
        for(int   i   =   0;   i <   (sizeof(tmp)/sizeof(double));   i++)
        {
                for(int   j   =   0;   j <(sizeof(tmp)/sizeof(double));   j++)
                {
                        if(tmp[i]   ==   tmpbuffer[j])
                        {
                                if(!indexfirst)
                                {
                                        indexfirst   =   j+1;
                                }
                                else   if(!indexsecond)
                                {
                                        indexsecond   =   j+1;
                                }
                                else   if(!indexthird)
                                {
                                        indexthird   =   j+1;
                                }
                        }
                }
        }


        switch(indexfirst)
        {
        case   1:
                memcpy(tmpdouble,   tmpsecond,   sizeof(double)*3);
                if(indexsecond   ==   3)
                {
                        memcpy(tmpthird,   tmpsecond,   sizeof(double)*3);
                        memcpy(tmpsecond,   tmpdouble,   sizeof(double)*3);
                }
                break;
        case   2:
                memcpy(tmpdouble,   tmpfirst,   sizeof(double)*3);
                memcpy(tmpfirst,   tmpsecond,   sizeof(double)*3);
                if(indexsecond   ==   1)
                {
                        memcpy(tmpsecond,   tmpdouble,   sizeof(double)*3);
                }
                else
                {
                        memcpy(tmpsecond,   tmpthird,   sizeof(double)*3);
                        memcpy(tmpthird,   tmpdouble,   sizeof(double)*3);
                }
                break;
        case   3:
                memcpy(tmpdouble,   tmpfirst,   sizeof(double)*3);
                memcpy(tmpfirst,   tmpthird,   sizeof(double)*3);
                if(indexthird   ==   1)
                {
                        memcpy(tmpthird,   tmpdouble,   sizeof(double)*3);
                }
                else
                {
                        memcpy(tmpthird,   tmpsecond,   sizeof(double)*3);
                        memcpy(tmpsecond,   tmpdouble,   sizeof(double)*3);
                }
                break;
        default:
                break;
        }

        printf( "============after   sort============\n ");
        printf( "sort   tmp:   %.1f,   %.1f,   %.1f\n ",   tmp[0],   tmp[1],   tmp[2]);
        printf( "sort   tmp_s:\n ");
        printf( "%f,   %f,   %f\n ",   tmp_s[0][0],   tmp_s[0][1],   tmp_s[0][2]);
        printf( "%f,   %f,   %f\n ",   tmp_s[1][0],   tmp_s[1][1],   tmp_s[1][2]);
        printf( "%f,   %f,   %f\n ",   tmp_s[2][0],   tmp_s[2][1],   tmp_s[2][2]);

        free(tmpdouble);
        free(tmpbuffer);
}
---------------------------
output
============after   sort============
sort   tmp:   3.2,   2.2,   1.2
sort   tmp_s:
-0.134119,   0.988251,   -0.073292
0.987924,   0.139131,   0.068176
-0.077573,   0.063263,   0.994978

给分,   谢谢
发表于:2007-09-11 20:52:065楼 得分:0
mark
也给分我
发表于:2007-09-11 21:45:476楼 得分:0
哇,看了前楼的代码真是要晕了,这么长!
发表于:2007-09-12 09:56:297楼 得分:0
少说废话,有能力就拿出来看看....没能力就别在这装
发表于:2007-09-12 11:44:048楼 得分:0
说我?
#define   line       4
#define   column   5  
typedef   float     array[line];

typedef   struct
{
array   tmp;
array   tmp_s[column];
float   *ptr[line];
}struct_t;

struct_t   data   =  
{
{2.2,   3.2,   1.2},
{
{0.987924,     0.139131,     0.068176},
{-0.134119,   0.988251,     -0.073292},
{-0.077573,   0.063263,     0.994978}
},
{0,   0,   0}
};

void   floatswap(float   *a,   float   *b)
{
float   ftmp;
ftmp   =   *a;
*a   =   *b;
*b   =   ftmp;
}

void   arrayswap(float   *psrc,   float   *pdest)
{
int   i,   ilen;
float   ftmp;


for(i   =   0;   i   <   column;   i++)
{
floatswap(psrc,   pdest);
}

}

void   seq(float   *pdata,   float   *parray,   int   len)
{
int   ilen,   i,   j;

ilen   =   len;

for(i   =   1;   i   <   ilen;   i++)
{
for(j   =   ilen   -   1;   j   > =   i;   j--)
{
if(*(pdata   +   j)   >   *(pdata   +   j   -   1))
{
floatswap(pdata   +   j,   pdata   +   j   -   1);
arrayswap(parray   +   column*j,   parray   +   column*(j   -1));
}
}
}
}

void   display(void)
{
int   i,   j;

for(i   =   0;   i   <   line;   i++)
{
printf( "data.tmp[%d]:           ",   i);
}
printf( "\n ");

for(i   =   0;   i   <   line;   i++)
{
printf( "%f%10c ",   data.tmp[i],   '   ');
}
printf( "\n ");

for(i   =   0;   i   <   line;   i++)
{
printf( "data.tmp_s[%d]:       ",   i);
}
printf( "\n ");

for(j   =   0;   j   <   column;   j++)
{
for(i   =   0;   i   <   line;   i++)
{
printf( "%f%10c ",   data.tmp_s[i][j],   '   ');
}
printf( "\n ");
}

}

main()
{
int   i;

for(i   =   0;   i   <   line;   i++)
{
data.ptr[i]   =(float   *)&data.tmp_s[i];
}

seq((float   *)&data.tmp[0],   (float   *)data.ptr[0],   line);

display();
}
发表于:2007-09-12 16:25:409楼 得分:0
^_^


快速检索

最新资讯
热门点击