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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
かな

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

#1

投稿記事 by かな » 15年前

次の問題がわかりません。

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

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

box

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

#2

投稿記事 by box » 15年前

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

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

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

かな

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

#3

投稿記事 by かな » 15年前

ソースコード全体の作成をお願いしたいです。

ru

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

#4

投稿記事 by ru » 15年前

#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;
}

box

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

#5

投稿記事 by box » 15年前

> ソースコード全体の作成をお願いしたいです。

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る