ページ 11

配列を小さい順に並び変える関数

Posted: 2010年5月29日(土) 16:57
by かな
次の問題がわかりません。

NUM個のint型の配列を考える。このとき、この配列を小さい順に並び変える関数を作成し、その動作を確認しなさい。小さい順に並び替えるアルゴリズムは、以下のアルゴリズムを実装すること。

↓↓↓
配列の名前をa、配列の要素を6個として説明する。

Step1.1: a[5]とa[4]を比べて、順番が間違っていたら、a[5]とa[4]の値を入れ替える。
Step1.2: a[5]とa[3]を比べて、順番が間違っていたら、a[5]とa[3]の値を入れ替える。
………
Step1.n: a[5]とa[0]を比べて、順番が間違っていたら、a[5]とa[0]の値を入れ替える(必ずa[5]に一番大きい値が入っている)。
Step2.1: a[4]とa[3]を比べて、順番が間違っていたら、a[4]とa[3]の値を入れ替える。
Step2.2: a[4]とa[2]を比べて、順番が間違っていたら、a[4]とa[2]の値を入れ替える。
………
↑↑↑

○環境
 ・OS:Linux
 ・コンパイラ名とバージョン:gcc
 ・言語:C

以上です。よろしくお願いいたします。

Re:配列を小さい順に並び変える関数

Posted: 2010年5月29日(土) 17:47
by box
> 配列の名前をa、配列の要素を6個として説明する。

配列の要素数が4個、5個、6個あたりの場合について、
手で入れ替えるとしたらどうするかを紙に書き出します。

そこには、必ず何らかの法則があります。
後は、その法則に従い、要素数をNUM個の場合に一般化してください。

Re:配列を小さい順に並び変える関数

Posted: 2010年5月30日(日) 05:09
by かな
ソースコード全体の作成をお願いしたいです。

Re:配列を小さい順に並び変える関数

Posted: 2010年5月30日(日) 06:01
by ru
#include <stdio.h>
#include <stdlib.h>

#define NUM (6)

int a[NUM], w, i, j;

void init()
{
    srand((unsigned int)time(NULL));
    for(i=0;i<NUM;i++)
    {
        a=rand();
    }
}

void sort()
{
    for(i=NUM-1;i>0;i--)
    {
        for(j=i-1;j>=0;j--)
        {
            if(a<a[j])
            {
                w = a;
                a = a[j];
                a[j] = w;
            }
        }
    }
}

void disp()
{
    for(i=0;i<NUM;i++)
    {
        printf("a[%d]=%d\n", i, a);
    }
    printf("\n");
}

int main()
{
    init();
    disp();
    sort();
    disp();
    return 0;
}

Re:配列を小さい順に並び変える関数

Posted: 2010年5月30日(日) 08:02
by box
> ソースコード全体の作成をお願いしたいです。

人間、考えることをやめたら退化していくだけです。
ご自分の脳をフル回転させてください。

人から与えられたソースコードを鵜呑みにするのでなく、
アルゴリズムを自分で考えてソースコードに落としていく作業こそが
プログラミングの醍醐味です。それを放棄してはいけません。