| 发表于: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 给分, 谢谢 | | |
|