C言語関係掲示板

過去ログ

No.1289 乱数を発生させて、それを若い順に並び替えたいのですが・・・・。

[戻る] [ホームページ]
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)


すいませんでした。注意事項は守らないで。
みなさまのおかげでなんとか、完成させること
ができました。
どうやら、構造体の所や若い順に並び替えの箇所が違っていたようです。
これからもお世話になると思いますがよろしくお願いします。