No.17130![]() |
乱数を発生させて、それを若い順に並び替えたいのですが・・・・。 投稿者---未熟な卒研生(2004/10/06 15:22:46) |
||
以下のソースで乱数は発生させられるのですが、 なぜか若い順に並び替えが実行されません。 ご指導お願いします。 #include <stdio.h> #include <stdlib.h> #include<time.h> #define KOMA 40 #define KAMOKUSUU 33 int a[KOMA],i,j,hojo; main(){ srand((unsigned)time(NULL)); /* 乱数の発生*/ for(i = 0;i < KOMA;i++) { a[i] = i; } for(i = 0;i < KOMA;i++){ j =rand()/32768.0*40.0; hojo = a[i]; a[i] = a[j]; a[j] = hojo; } printf("コマ番号\n "); for(i = 0;i < KAMOKUSUU;i++){ printf("%d ",a[i]); } printf("\n"); /*乱数の並び替え*/ for(i=0;i<KOMA;i++){ for(j=1;j<KOMA+1;j++){ if(a[i]>a[j]){ hojo = i; i = j; j = hojo; } } } printf("コマ番号\n "); for(i = 0;i < KAMOKUSUU;i++){ printf("%d ",a[i]); } printf("\n"); return 0; } |
No.17131![]() |
Re:乱数を発生させて、それを若い順に並び替えたいのですが・・・・。 投稿者---REE(2004/10/06 15:30:02) |
||
バブルソートだとしたら・・ for(i=0;i<KOMA-1;i++){ for(j=i+1;j<KOMA;j++){ |
No.17132![]() |
Re:乱数を発生させて、それを若い順に並び替えたいのですが・・・・。 投稿者---未熟な卒研生(2004/10/06 15:47:51) |
||
>バブルソートだとしたら・・ > >for(i=0;i<KOMA-1;i++){ >for(j=i+1;j<KOMA;j++){ こちらの変更を試してみましたが、ダメでした;; おそらく /* 乱数の並び替え */のfor文が 動いていないようなのです。 for文の位置や使い方はこれで合ってますでしょうか・・・? 初歩的な問題だと思うのですが泥沼にはまってしまってます。 |
No.17133![]() |
Re:乱数を発生させて、それを若い順に並び替えたいのですが・・・・。 投稿者---たいちう(2004/10/06 15:59:45) |
||
> hojo = i; > i = j; > j = hojo; これでしょ。 hojo = a[i]; a[i] = a[j]; a[j] = hojo; |
No.17137![]() |
Re:乱数を発生させて、それを若い順に並び替えたいのですが・・・・。 投稿者---Sciggepy変化前(2004/10/06 16:59:30) |
||
こんなのはどうでしょうか? #include <stdio.h> #include <stdlib.h> unsigned count=0; int comp(int n1,int n2) { count++; return n1<n2?1:(n1>n2?-1:0); } void mysort(int *src,int *ret,unsigned lc) { unsigned n,i,j,l; if(lc==1) ret[0]=src[0]; else if(lc==2) { if(comp(src[0],src[1])<0) { ret[0]=src[1]; ret[1]=src[0]; } else { ret[0]=src[0]; ret[1]=src[1]; } } else if(lc) { n=lc/2; mysort(src,ret,n); mysort(src+n,ret+n,lc-n); for(i=0;i<lc;i++) src[i]=ret[i]; for(i=0,j=0,l=0;i<n&&j<lc-n;) { if(comp(src[i],src[j+n])<0) ret[l++]=src[(j++)+n]; else ret[l++]=src[i++]; } while(i<n) ret[l++]=src[i++]; while(j<lc-n) ret[l++]=src[(j++)+n]; } } #define RLSS 20 int main(void) { int rls[RLSS],rlst[RLSS],i; srand(time(NULL)); for(i=0;i<RLSS;i++) rls[i]=rand()%256; printf("乱数列:\n"); for(i=0;i<RLSS;i++) printf("%d: %d\n",i,rls[i]); mysort(rls,rlst,RLSS); printf("\nソート結果:\n"); for(i=0;i<RLSS;i++) printf("%d: %d\n",i,rlst[i]); printf("\n比較回数=%d\n",count); return 0; } |
No.17154![]() |
Re:乱数を発生させて、それを若い順に並び替えたいのですが・・・・。 投稿者---ホワイト(2004/10/07 09:31:15) |
||
いまいちやりたいことがわからないのですが こういうことなのでしょうか? #include <stdio.h> #include <stdlib.h> #include<time.h> #define KOMA 40 #define KAMOKUSUU 33 int a[KOMA],i,j,hojo; main(){ srand(time(NULL)); /* 乱数の発生*/ for(i = 0;i < KOMA;i++) { a[i] = i; } for(i = 0;i < KOMA;i++){ j =rand()%40; hojo = a[i]; a[i] = a[j]; a[j] = hojo; } printf("コマ番号\n "); for(i = 0;i < KAMOKUSUU;i++){ printf("%d ",a[i]); } printf("\n"); /*乱数の並び替え*/ for(i=0;i<KOMA;i++){ for(j=i+1;j<KOMA;j++){ if(a[i]>a[j]){ hojo = a[i]; a[i] = a[j]; a[j] = hojo; } } } printf("コマ番号\n "); for(i = 0;i < KAMOKUSUU;i++){ printf("%d ",a[i]); } printf("\n"); return 0; } それと【掲示板ご利用上の注意】ちゃんと読みましょうね |
No.17185![]() |
Re:乱数を発生させて、それを若い順に並び替えたいのですが・・・・。 投稿者---未熟な卒研生(2004/10/08 12:47:10) |
||
すいませんでした。注意事項は守らないで。 みなさまのおかげでなんとか、完成させること ができました。 どうやら、構造体の所や若い順に並び替えの箇所が違っていたようです。 これからもお世話になると思いますがよろしくお願いします。 |