MyUtils.cpp
上传用户:szb0815
上传日期:2007-06-13
资源大小:338k
文件大小:9k
源码类别:

生物技术

开发平台:

C++ Builder

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "MyUtils.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. float** __fastcall newmatrix(int n, int m)
  8. {
  9.     float **TempPointer = new float*[n];
  10.     for (int i=0;i<n;i++)
  11.     {
  12.         TempPointer[i] = new float[m];
  13.         for (int j=0; j<m; j++)
  14.         {
  15.             TempPointer[i][j] = 0;
  16.         }
  17.     }
  18.     return TempPointer;
  19. }
  20. void __fastcall deletematrix(float** Matrix, int n)
  21. {
  22.     for (int i=0; i<n; i++)
  23.     {
  24.         delete Matrix[i];
  25.     }
  26.     delete Matrix;
  27. }
  28. int** __fastcall newimatrix(int n, int m)
  29. {
  30.     int **TempPointer = new int*[n];
  31.     for (int i=0;i<n;i++)
  32.     {
  33.         TempPointer[i] = new int[m];
  34.         for (int j=0; j<m; j++)
  35.         {
  36.             TempPointer[i][j] = 0;
  37.         }
  38.     }
  39.     return TempPointer;
  40. }
  41. void __fastcall deleteimatrix(int** Matrix, int n)
  42. {
  43.     for (int i=0; i<n; i++)
  44.     {
  45.         delete Matrix[i];
  46.     }
  47.     delete Matrix;
  48. }
  49. float * __fastcall newvector(int n)
  50. {
  51.     float *TempVector = new float[n];
  52.     for (int i=0; i<n; i++)
  53.     {
  54.         TempVector[i] = 0;
  55.     }
  56.     return TempVector;
  57. }
  58. int * __fastcall newivector(int n)
  59. {
  60.     int *TempVector = new int[n];
  61.     for (int i=0; i<n; i++)
  62.     {
  63.         TempVector[i] = 0;
  64.     }
  65.     return TempVector;
  66. }
  67. #define NRANSI
  68. #define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; #define M 7 #define NSTACK 50
  69. void sort2fi(unsigned long n, float arr[], int brr[])
  70. { unsigned long i,ir=n,j,k,l=1; int *istack,jstack=0; float a,temp;         int b; istack=ivector(1,NSTACK); for (;;) { if (ir-l < M) { for (j=l+1;j<=ir;j++) { a=arr[j]; b=brr[j]; for (i=j-1;i>=l;i--) { if (arr[i] <= a) break; arr[i+1]=arr[i]; brr[i+1]=brr[i]; } arr[i+1]=a; brr[i+1]=b; } if (!jstack) { free_ivector(istack,1,NSTACK); return; } ir=istack[jstack]; l=istack[jstack-1]; jstack -= 2; } else { k=(l+ir) >> 1; SWAP(arr[k],arr[l+1]) SWAP(brr[k],brr[l+1]) if (arr[l] > arr[ir]) { SWAP(arr[l],arr[ir]) SWAP(brr[l],brr[ir]) } if (arr[l+1] > arr[ir]) { SWAP(arr[l+1],arr[ir]) SWAP(brr[l+1],brr[ir]) } if (arr[l] > arr[l+1]) { SWAP(arr[l],arr[l+1]) SWAP(brr[l],brr[l+1]) } i=l+1; j=ir; a=arr[l+1]; b=brr[l+1]; for (;;) { do i++; while (arr[i] < a); do j--; while (arr[j] > a); if (j < i) break; SWAP(arr[i],arr[j]) SWAP(brr[i],brr[j]) } arr[l+1]=arr[j]; arr[j]=a; brr[l+1]=brr[j]; brr[j]=b; jstack += 2; if (jstack > NSTACK) nrerror("NSTACK too small in sort2."); if (ir-i+1 >= j-l) { istack[jstack]=ir; istack[jstack-1]=i; ir=j-1; } else { istack[jstack]=j-1; istack[jstack-1]=l; l=i; } } } } #undef M #undef NSTACK #undef SWAP #undef NRANSI
  71. #define NRANSI
  72. #define SWAP(a,b) temp=(a);(a)=(b);(b)=temp;
  73. #define M 7
  74. #define NSTACK 50
  75. void sort2i(unsigned long n, int arr[], int brr[])
  76. {
  77. unsigned long i,ir=n,j,k,l=1;
  78. int *istack,jstack=0;
  79. int a,b,temp;
  80. istack=ivector(1,NSTACK);
  81. for (;;) {
  82. if (ir-l < M) {
  83. for (j=l+1;j<=ir;j++) {
  84. a=arr[j];
  85. b=brr[j];
  86. for (i=j-1;i>=l;i--) {
  87. if (arr[i] <= a) break;
  88. arr[i+1]=arr[i];
  89. brr[i+1]=brr[i];
  90. }
  91. arr[i+1]=a;
  92. brr[i+1]=b;
  93. }
  94. if (!jstack) {
  95. free_ivector(istack,1,NSTACK);
  96. return;
  97. }
  98. ir=istack[jstack];
  99. l=istack[jstack-1];
  100. jstack -= 2;
  101. } else {
  102. k=(l+ir) >> 1;
  103. SWAP(arr[k],arr[l+1])
  104. SWAP(brr[k],brr[l+1])
  105. if (arr[l] > arr[ir]) {
  106. SWAP(arr[l],arr[ir])
  107. SWAP(brr[l],brr[ir])
  108. }
  109. if (arr[l+1] > arr[ir]) {
  110. SWAP(arr[l+1],arr[ir])
  111. SWAP(brr[l+1],brr[ir])
  112. }
  113. if (arr[l] > arr[l+1]) {
  114. SWAP(arr[l],arr[l+1])
  115. SWAP(brr[l],brr[l+1])
  116. }
  117. i=l+1;
  118. j=ir;
  119. a=arr[l+1];
  120. b=brr[l+1];
  121. for (;;) {
  122. do i++; while (arr[i] < a);
  123. do j--; while (arr[j] > a);
  124. if (j < i) break;
  125. SWAP(arr[i],arr[j])
  126. SWAP(brr[i],brr[j])
  127. }
  128. arr[l+1]=arr[j];
  129. arr[j]=a;
  130. brr[l+1]=brr[j];
  131. brr[j]=b;
  132. jstack += 2;
  133. if (jstack > NSTACK) nrerror("NSTACK too small in sort2.");
  134. if (ir-i+1 >= j-l) {
  135. istack[jstack]=ir;
  136. istack[jstack-1]=i;
  137. ir=j-1;
  138. } else {
  139. istack[jstack]=j-1;
  140. istack[jstack-1]=l;
  141. l=i;
  142. }
  143. }
  144. }
  145. }
  146. #undef M
  147. #undef NSTACK
  148. #undef SWAP
  149. #undef NRANSI
  150. #define NRANSI
  151. #define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; #define M 7 #define NSTACK 50
  152. void sort3fff(unsigned long n, float arr[], float brr[], float crr[])
  153. { unsigned long i,ir=n,j,k,l=1; int *istack,jstack=0; float a,temp;         float b,c; istack=ivector(1,NSTACK); for (;;) { if (ir-l < M) { for (j=l+1;j<=ir;j++) { a=arr[j]; b=brr[j];                                 c=crr[j]; for (i=j-1;i>=l;i--) { if (arr[i] <= a) break; arr[i+1]=arr[i]; brr[i+1]=brr[i];                                         crr[i+1]=crr[i]; } arr[i+1]=a; brr[i+1]=b;                                 crr[i+1]=c; } if (!jstack) { free_ivector(istack,1,NSTACK); return; } ir=istack[jstack]; l=istack[jstack-1]; jstack -= 2; } else { k=(l+ir) >> 1; SWAP(arr[k],arr[l+1]) SWAP(brr[k],brr[l+1])                         SWAP(crr[k],crr[l+1]) if (arr[l] > arr[ir]) { SWAP(arr[l],arr[ir]) SWAP(brr[l],brr[ir])                                 SWAP(crr[l],crr[ir]) } if (arr[l+1] > arr[ir]) { SWAP(arr[l+1],arr[ir]) SWAP(brr[l+1],brr[ir]) SWAP(crr[l+1],crr[ir]) } if (arr[l] > arr[l+1]) { SWAP(arr[l],arr[l+1]) SWAP(brr[l],brr[l+1]) SWAP(crr[l],crr[l+1]) } i=l+1; j=ir; a=arr[l+1]; b=brr[l+1];                         c=crr[l+1]; for (;;) { do i++; while (arr[i] < a); do j--; while (arr[j] > a); if (j < i) break; SWAP(arr[i],arr[j]) SWAP(brr[i],brr[j]) SWAP(crr[i],crr[j]) } arr[l+1]=arr[j]; arr[j]=a; brr[l+1]=brr[j]; brr[j]=b; crr[l+1]=crr[j]; crr[j]=c; jstack += 2; if (jstack > NSTACK) nrerror("NSTACK too small in sort2."); if (ir-i+1 >= j-l) { istack[jstack]=ir; istack[jstack-1]=i; ir=j-1; } else { istack[jstack]=j-1; istack[jstack-1]=l; l=i; } } } } #undef M #undef NSTACK #undef SWAP #undef NRANSI
  154. #define NRANSI
  155. #define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; #define M 7 #define NSTACK 50
  156. void sort2fi_0(unsigned long n, float arr[], int brr[])
  157. { unsigned long i,ir=n-1,j,k,l=0; int *istack,jstack=0; float a,temp;         int b; istack=ivector(1,NSTACK); for (;;) { if (ir-l < M) { for (j=l+1;j<ir;j++) { a=arr[j]; b=brr[j]; for (i=j-1;i>=l;i--) { if (arr[i] <= a) break; arr[i+1]=arr[i]; brr[i+1]=brr[i]; } arr[i+1]=a; brr[i+1]=b; } if (!jstack) { free_ivector(istack,1,NSTACK); return; } ir=istack[jstack]; l=istack[jstack-1]; jstack -= 2; } else { k=(l+ir) >> 1; SWAP(arr[k],arr[l+1]) SWAP(brr[k],brr[l+1]) if (arr[l] > arr[ir]) { SWAP(arr[l],arr[ir]) SWAP(brr[l],brr[ir]) } if (arr[l+1] > arr[ir]) { SWAP(arr[l+1],arr[ir]) SWAP(brr[l+1],brr[ir]) } if (arr[l] > arr[l+1]) { SWAP(arr[l],arr[l+1]) SWAP(brr[l],brr[l+1]) } i=l+1; j=ir; a=arr[l+1]; b=brr[l+1]; for (;;) { do i++; while (arr[i] < a); do j--; while (arr[j] > a); if (j < i) break; SWAP(arr[i],arr[j]) SWAP(brr[i],brr[j]) } arr[l+1]=arr[j]; arr[j]=a; brr[l+1]=brr[j]; brr[j]=b; jstack += 2; if (jstack > NSTACK) nrerror("NSTACK too small in sort2."); if (ir-i+1 >= j-l) { istack[jstack]=ir; istack[jstack-1]=i; ir=j-1; } else { istack[jstack]=j-1; istack[jstack-1]=l; l=i; } } } } #undef M #undef NSTACK #undef SWAP #undef NRANSI
  158. #define NRANSI
  159. #define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; #define M 7 #define NSTACK 50
  160. void sort2_0(unsigned long n, float arr[], float brr[])
  161. { unsigned long i,ir=n-1,j,k,l=0; int *istack,jstack=0; float a,temp;         float b; istack=new int[NSTACK]; for (;;) { if (ir-l < M) { for (j=l+1;j<ir;j++) { a=arr[j]; b=brr[j]; for (i=j-1;i>=l;i--) { if (arr[i] <= a) break; arr[i+1]=arr[i]; brr[i+1]=brr[i]; } arr[i+1]=a; brr[i+1]=b; } if (!jstack) { delete istack; return; } ir=istack[jstack]; l=istack[jstack-1]; jstack -= 2; } else { k=(l+ir) >> 1; SWAP(arr[k],arr[l+1]) SWAP(brr[k],brr[l+1]) if (arr[l] > arr[ir]) { SWAP(arr[l],arr[ir]) SWAP(brr[l],brr[ir]) } if (arr[l+1] > arr[ir]) { SWAP(arr[l+1],arr[ir]) SWAP(brr[l+1],brr[ir]) } if (arr[l] > arr[l+1]) { SWAP(arr[l],arr[l+1]) SWAP(brr[l],brr[l+1]) } i=l+1; j=ir; a=arr[l+1]; b=brr[l+1]; for (;;) { do i++; while (arr[i] < a); do j--; while (arr[j] > a); if (j < i) break; SWAP(arr[i],arr[j]) SWAP(brr[i],brr[j]) } arr[l+1]=arr[j]; arr[j]=a; brr[l+1]=brr[j]; brr[j]=b; jstack += 2; if (jstack > NSTACK) nrerror("NSTACK too small in sort2."); if (ir-i+1 >= j-l) { istack[jstack]=ir; istack[jstack-1]=i; ir=j-1; } else { istack[jstack]=j-1; istack[jstack-1]=l; l=i; } } } } #undef M #undef NSTACK #undef SWAP #undef NRANSI