ソートについてなのですが・・・

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

ソートについてなのですが・・・

#1

投稿記事 by karasumi431 » 12年前

こんにちわ、初めてこのサイトを利用します。
単純選択ソートについて課題が出されたのですが、今までバブルソートしかやってこなかったのでこんがらがっています・・・
乱数を発生させてその数を配列に入れて降順にソートするのですが、ソートの部分を関数void sort(int ab[],n)を利用して作らなければならなくて
とりあえず乱数を発生させて配列に入れて表示させるところまではできたのですが・・・
どなたか分かりやすくプログラムとその説明を教えてくださいませんでしょうか?
聞き方間違えていたら申し訳ないです、よろしくお願いします。

アバター
usao
記事: 1892
登録日時: 12年前
連絡を取る:

Re: ソートについてなのですが・・・

#2

投稿記事 by usao » 12年前

>ソートの部分を関数void sort(int ab[],n)を利用して作らなければならなくて

既にソート処理の関数が用意されているなら
あとは呼ぶだけなのでは…??

とりあえず課題であれば,可能ならば課題の内容全てが分かる形の方が(誰かが)答えやすいと思います.
さらに,「現在どこまできていて,どこができていない」みたいなのをコードで示すと良いかと.

#フォーラムルールにコードの部分をどう書けばいいかなどが書かれているので目を通してください

box
記事: 2002
登録日時: 15年前

Re: ソートについてなのですが・・・

#3

投稿記事 by box » 12年前

usao さんが書きました:>ソートの部分を関数void sort(int ab[],n)を利用して作らなければならなくて

既にソート処理の関数が用意されているなら
あとは呼ぶだけなのでは…??
私の解釈はこうです。
void sort(int ab[], n)
というプロトタイプ宣言を持つ関数を「単純選択法を使って『自作』」し、
プログラム全体を完成させる。

この解釈が正しいかどうかは、質問者さんのみぞ知る。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソートについてなのですが・・・

#4

投稿記事 by みけCAT » 12年前

box さんが書きました:私の解釈はこうです。
void sort(int ab[], n)
というプロトタイプ宣言を持つ関数を「単純選択法を使って『自作』」し、
プログラム全体を完成させる。
私は

コード:

void sort(int ab[], n) {
    /* 処理を書く */
}
を実装しろ、という意味だと考えました。

しかし、プロトタイプ宣言ならば

コード:

typedef size_t n;
というコードをその前に書けば普通にコンパイルを通せるので、
プロトタイプ宣言と解釈したほうが適切だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 15年前

Re: ソートについてなのですが・・・

#5

投稿記事 by box » 12年前

自作するでも実装するでもどっちでもいいんですが、
要するに、別の回答者さんが書かれている
「すでにできあがっている関数を呼ぶだけ」ではないであろう、
ということです。それじゃ課題にならない。

おそらく、その課題の本質は「単純選択ソートというアルゴリズムを
自分のものにする」ところにあると思います。
したがって、出来合いのコードを使うのではなく、自作する(自分で実装する)点に
大きな意味があると思います。
というわけですから、頑張ってください。>質問者さん
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 15年前

Re: ソートについてなのですが・・・

#6

投稿記事 by non » 12年前

ここが参考になると思われます。
http://www.geocities.jp/ky_webid/Progra ... t/002.html
non

鴉味
記事: 4
登録日時: 12年前

Re: ソートについてなのですが・・・

#7

投稿記事 by 鴉味 » 12年前

non さんが書きました:ここが参考になると思われます。
http://www.geocities.jp/ky_webid/Progra ... t/002.html
こちらを参考に書いたのですがソート後の出力がうまくいきません、何が間違えているのでしょうか?

コード:

 
#include"kansuu.h"

void main(void)
{
	int a[N];
	int i;

	printf("ソート前データ\n");
	srand((unsigned)time(NULL));
	for(i=0;i<N;i++)
	{
		a[i]=rand()%100+1;
		printf("%d",a[i]);
	}
	putchar('\n');

	printf("ソート後データ\n");
	sort(a,N);
	for(i=0;i<N;i++)
	{
		printf("%d",a[i]);
	}
	putchar('\n');

}


ソート 関数

コード:

 

#include"kansuu.h"

void sort(int ab[],int n)
{
	int i,j,k;
	int temp;
	int min;
	
	for(i=0;i<n-1;i++){
		min=ab[i];
		k=i;
		for(j=i+1;j<n;j++){
			if(min>ab[j]){
				min=ab[j];
				k=j;
			}
	temp = ab[i];
        	ab[i] =ab[k];
        	ab[k] = temp;
		}
	}
}
				

コード:

 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10

void sort(int ab[],int n);
最後に編集したユーザー 鴉味 on 2013年11月06日(水) 23:34 [ 編集 1 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソートについてなのですが・・・

#8

投稿記事 by みけCAT » 12年前

コード:

printf("%d",a[i]);
という行(2箇所)を、

コード:

printf("%d%s",a[i],i+1<N?" ":"");
としてみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソートについてなのですが・・・

#9

投稿記事 by みけCAT » 12年前

sort関数の入れ替え部分は、jのループの外に出すほうがいいと思います。

コード:

void sort(int ab[],int n)
{
	int i,j,k;
	int temp;
	int min;

	for(i=0;i<n-1;i++){
		min=ab[i];
		k=i;
		for(j=i+1;j<n;j++){
			if(min>ab[j]){
				min=ab[j];
				k=j;
			}
		}
		temp = ab[i];
		ab[i] =ab[k];
		ab[k] = temp;
	}
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

鴉味
記事: 4
登録日時: 12年前

Re: ソートについてなのですが・・・

#10

投稿記事 by 鴉味 » 12年前

まだ外部シンボル '_sort' が未解決とエラーが出ます・・・何かが抜けているのでしょうか・・・?

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソートについてなのですが・・・

#11

投稿記事 by みけCAT » 12年前

きちんと2個のソースファイルをコンパイルしたオブジェクトファイルをリンクしましたか?

わざわざオブジェクトファイルを作らなくても、最初のソースコードをmain.c、二番目のソースコードをsort.cだと仮定して、

コード:

>gcc -s -o sort main.c sort.c
としてコンパイルすればいいはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

鴉味
記事: 4
登録日時: 12年前

Re: ソートについてなのですが・・・

#12

投稿記事 by 鴉味 » 12年前

学校で使っているものと違うので、慣れてなかったので操作を間違えていました><
やってみたらしっかりと実行して昇順にソートしていました。ありがとうございます^^

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソートについてなのですが・・・

#13

投稿記事 by みけCAT » 12年前

課題は降順にソートすることだったと思いますが、大丈夫ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

鴉味
記事: 4
登録日時: 12年前

Re: ソートについてなのですが・・・

#14

投稿記事 by 鴉味 » 12年前

すいません、ごっちゃになってました
if文の演算子を逆にしたら降順になったので大丈夫です。
ご指摘ありがとうございます><

閉鎖

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