printfの挿入箇所
#include <stdio.h>
#include <stdlib.h>
#define N 500
void bubblesort(int h, int k, int *A);
void swap(int i, int j, int *A);
int main(void)
{
int A[N];
int n, i;
FILE *file;
file=fopen("sortdata", "r"); /* データの読込み */
fscanf(file, "%d", &n);
if(n>N)
{
printf("Illegal array size n = %d for N = %d\n", n, N);
exit(1);
}
for(i=0; i<n; i++) fscanf(file, "%d", &A[i]);
/**/ printf("A = ");
/**/ printf("\n");
bubblesort(0, n-1, A); /* 配列A[0]からA[n-1]の整列 */
return(0);
}
/* A[k],...,A[h]の要素をバブルソートによって整列 */
void bubblesort(int h, int k, int *A)
{
int i, j, p;
int no;
int test; /* test==1; すでに整列済み */
for(i=h; i<k; i++) /* バブル操作の反復 */
{
test=1;
for(j=k; j>=i+1; j--)
{
for(no=0; no<j; no++) printf(" %d",A[no]);
if(A[j]<A[j-1])
{
printf(" > %d ",A[j]);
swap(j, j-1, A); test=0;
}
else
{
printf(" < %d ",A[j]);
}
for(no=j+1; no<=k; no++) printf(" %d ",A[no]);
printf("\n");
}
printf("\n");
if(test==1) return;
}
return;
}
/* Swap A[i] and A[j]. */
void swap(int i, int j, int *A)
{
int temp;
temp=A[i]; A[i]=A[j]; A[j]=temp;
return;
}
以上のプログラムを
A = パス1:
7 5 1 2 8 > 3
7 5 1 2 < 3 8
7 5 1 < 2 3 8
7 5 > 1 2 3 8
7 > 1 5 2 3 8
1 7 5 2 3 8
パス2:
1 7 5 2 3 < 8
1 7 5 2 < 3 8
1 7 5 > 2 3 8
1 7 > 2 5 3 8
1 2 7 5 3 8
パス3:
1 2 7 5 3 < 8
1 2 7 5 > 3 8
1 2 7 > 3 5 8
1 2 3 7 5 8
パス4:
1 2 3 7 5 < 8
1 2 3 7 > 5 8
1 2 3 5 5 8
パス5:
1 2 3 5 7 < 8
1 2 3 5 7 8
比較は15回でした。
交換は8回でした。
と表示させたいのですがうまくいきません。
どなたかご指導よろしくお願いします
お礼
回答頂きありがとうございました。 printf("data:%X addr:%p\n\r", ((volatile u8 *)SRAM_BASE_ADDR)[1],&(((volatile u8 *)SRAM_BASE_ADDR)[1])); こうゆう書き方でもいけるんですね。便利ですね。 別にこのdefineは必要ないんですね。 #define SRAM_TEST_ADDR *((volatile u8 *)SRAM_BASE_ADDR) SRAMに書き込んで、それが正常にリードライトできるかどうかやってみたかったのですが、 たとえば、0x600001番地のアドレスにインクリメントしていくだけの時も ((volatile u8 *)SRAM_BASE_ADDR)[1] = ((volatile u8 *)SRAM_BASE_ADDR)[1] + 1; こんなやり方でインクリメントも可能なんですね。