/*****************************************************
Recursion
******************************************************/
/* qsort: sort[left]...v[right] into increasing order */
void qsort(int v[],int left,int right)
{
int i,last;
if(left>=right) /* do nothing if array contains */
return; /* fewer than two elements */
swap(v,left,(left+right)/2); /* move partition elem */
last=left; /* to v[0] */
for(i=left+1;i<=right;i++) /* partition */
if(v[i]<v[left])
swap(v,++last,i);
swap(v,left,last); /* restore partition elem */
qsort(v,left,last-1);
qsort(v,last+1,right);
}
/* swap: interchange v[i] and v[j] */
void swap(int v[],int i,int j)
{
int temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
int main()
{
int a[]={268, 835, 643, 132, 214, 713, 976, 509, 477, 113, 332};
int i,nelem;
nelem=11;
qsort(a,0,nelem-1);
for(i=0;i<nelem;i++) printf("%i %i\n",i,a[i]);
}
|
0 113 1 132 2 214 3 332 4 268 5 509 6 477 7 643 8 713 9 835 10 976 |
/*****************************************************
Matrix
******************************************************/
main()
{
double c[3][3];
double a[3][3]={
3.2, 4.6, 1.8,
9.4, 8.3, 2.3,
7.2, 6.8, 5.4};
double b[3][3]={
1.8, 3.5, 2.7,
3.8, 9.4, 8.8,
2.1, 8.4, 5.9};
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
c[i][j]=0.;
for(k=0;k<3;k++) c[i][j]=c[i][j]+a[i][k]*b[k][j];
printf("c[%i][%i]=%6.3f\n",i,j,c[i][j]);
}
}
|
c[0][0]=27.020 c[0][1]=69.560 c[0][2]=59.740 c[1][0]=53.290 c[1][1]=130.240 c[1][2]=111.990 c[2][0]=50.140 c[2][1]=134.480 c[2][2]=111.140 |
/*****************************************************
Matrix
******************************************************/
main()
{
double c[3][3];
double a[3][3]={
3.2, 4.6, 1.8,
9.4, 8.3, 2.3,
7.2, 6.8, 5.4};
double b[3][3]={
1.8, 3.5, 2.7,
3.8, 9.4, 8.8,
2.1, 8.4, 5.9};
int i,j,k;
matmul(c,a,b);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("c[%i][%i]=%6.3f\n",i,j,c[i][j]);
}
|
c[0][0]=27.020 c[0][1]=69.560 c[0][2]=59.740 c[1][0]=53.290 c[1][1]=130.240 c[1][2]=111.990 c[2][0]=50.140 c[2][1]=134.480 c[2][2]=111.140 |
/*****************************************************
Matrix - matrix inversion
******************************************************/
main()
{
double a[3][3]={
3.2, 4.6, 1.8,
9.4, 8.3, 2.3,
7.2, 6.8, 5.4};
double b[3][3],c[3][3];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++) b[i][j]=a[i][j];
matinv(a);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("a[%i][%i]=%6.3f\n",i,j,a[i][j]);
matmul(c,b,a);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("c[%i][%i]=%6.3f\n",i,j,c[i][j]);
}
|
a[0][0]=-0.517 a[0][1]= 0.223 a[0][2]= 0.077 a[1][0]= 0.606 a[1][1]=-0.077 a[1][2]=-0.169 a[2][0]=-0.074 a[2][1]=-0.201 a[2][2]= 0.295 c[0][0]= 1.000 c[0][1]=-0.000 c[0][2]= 0.000 c[1][0]=-0.000 c[1][1]= 1.000 c[1][2]= 0.000 c[2][0]=-0.000 c[2][1]= 0.000 c[2][2]= 1.000 |