実行結果がうまく小さい順にならない
C言語で、ランダムで発生させた数字をselect_sortを使って、小さい順に並べたいです。しかしterminalで以下のコマンドを使用しても、ところどころ小さい順に並びませんでした:
$ gcc sort2.c -o sort2.s
$ time ./sort2.s
data size = 200
8 11 12 18 22 15 24 32 38 40
16 42 47 68 73 73 75 85 88 97
100 101 106 112 113 124 143 149 154 156
157 160 162 165 166 168 169 169 169 176
180 207 208 209 214 225 231 228 249 256
256 257 259 269 282 284 306 306 307 312
319 321 325 327 329 331 346 352 354 358
359 371 373 376 380 386 386 395 396 399
404 413 419 423 423 426 430 433 438 443
446 446 447 471 478 486 491 493 502 505
510 515 518 523 523 525 526 528 529 533
543 544 548 551 556 558 573 580 598 603
605 609 609 615 627 642 643 646 650 652
655 661 671 682 688 690 692 712 713 715
720 725 725 738 739 751 754 755 758 758
763 768 768 788 790 803 811 816 820 826
826 832 833 843 851 853 858 858 865 871
884 886 889 890 892 892 895 904 905 908
911 911 914 915 915 921 925 927 936 941
949 952 952 958 957 960 982 983 985 991
real 0m0.008s
user 0m0.003s
sys 0m0.002s
どこがおかしいのか指摘していただけないでしょうか。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 200
#define RandMax 1000
void select_sort(int a[], int n){ /*ランダムで発生した数字を小さい順に並べ替える*/
int *i;
int *j;
int *min;
int t;
int *last;
last=a+MAX;
for (i=a; i<last; i++){
min = i;
for(j=i+1; j<last; j++){
if (*j < *min){
min=j;
}
t=*min;
*min = *i;
*i=t;
}
}
}
int main(){
int a[MAX];
int i;
srand((unsigned)time(NULL));
for(i = 0; i < MAX; i++){
a[i] = rand()%RandMax;
}
//for (i=0; i<10000; 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");
}
}