C言語で配列をポインタに、ポインタをレジスタにするプログラム
数字を指定された範囲内でランダムに発生させ、select_sortで小さい順に並べるプログラムを作成しています。配列のプログラムは作成できたのですが、それをポインタやレジスタにする方法がわかりません。
下記に示すのがそのプログラムです:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 800000
#define RandMax 1000
void select_sort(int a[], int n){ /*ランダムで発生した数字を小さい順に並べ替える*/
int i, j, min, t;
for (i=0; i<n; i++){
min = i;
for(j=i+1; j<n; j++)
if (a[j] < a[min])
min = j;
t = a[min];
a[min] = a[i];
a[i] = t;
}
}
int main(){
int a[MAX], i;
srand((unsigned)time(NULL));
for(i = 0; i < MAX; i++)
a[i] = rand()%RandMax;
for (i=0; i<1000; i++){
select_sort(a, MAX);
}
printf("data size = %d\n", MAX);
/*for(i = 0; i < MAX; i++){
printf("%5d", a[i]);
if (i%10 == 9)
printf("\n");
}*/
}
void select_sortから下のfor文を書き換えればできるとのことですが、どう書き換えればいいのかわかりません。教えてください。
例文として、配列
#include <stdio.h>
#include <stdlib.h>
int main(){
int a[10], i, max;
for(i=0; i<10; i++) a[i]=rand()%100;
max=0;
for(i=1; i<10; i++){
if(a[max] < a[i])
max=i;
}
for(i=0; i<10; i++)
printf("a[%d]= %d \n", i, a[i]);
printf("max = %d, a[max]=%d \n", max, a[max]);
}
を以下のポインタのように書き換えれば、一つ目のプログラムも実行可能との指示を受けました。
#include <stdio.h>
#include <stdlib.h>
int main(){
int a[10];
int *i;
int *max;
int *last;
last=a+10;
for(i=a; i<last; i++)*i = rand()%100;
max=a;
for (i=a; i<last; i++){
if(*max<*i)
max=i;
}
for (i=a; i<last; i++)
printf("a[%ld]=%d \n", i-a, *i);
printf("max=%ld, a[max]=%d \n", max-a, *max);
}