プロが教える店舗&オフィスのセキュリティ対策術

昇順(1,1,1・・2,2,2・・・9999,9999)に並び替えるプログラムを実装してください.
 (1)挿入ソート
 (2)選択ソート
 (3)バブルソート
 (4)クイックソート
なお,整列アルゴリズムの実装は,sort_main 関数でプログラムを記述してください.また,必要あれば,別関数を定義しても良い.

特に(1),(2)について教えてください。

#include <stdio.h>
#include <time.h>

// 定数宣言
#define COUNT 100000 // データ数を指定
#define INFILE "07sort.txt"// 入力ファイルを指定
#define SORTFILE "out.txt" // 出力ファイルを指定

// プロトタイプ宣言
void sort_main(int *);
void getFile(int *);
void outFile(int *);
double getFuncTime(clock_t, clock_t);

// ソート(並び替え)メイン関数
void sort_main(int *array){

// ソート(並び替え)の処理を本関数で実現すること
// 処理をまとめたい場合は,別関数を定義すること

// *(array) = 10;<-- data[0] = 10; と同じ
// *(array + 10) = 100;<-- data[10] = 100;と同じ
}

// プログラムのメイン関数
int main(){
// 変数宣言
clock_t start,end; // 開始&終了時間を格納
int data[COUNT]; // ファイル内のデータを格納

// ファイルからデータの読み込み
getFile(data);

// 処理開始時間の設定
start = clock();

// ソート関数の呼出し
sort_main(data);

// 処理終了時間の設定
end = clock();

/// 処理にかかった時間の出力
printf("--- Sort Time is %.2f sec. ---\n", getFuncTime(start, end));

// 配列に保存されたデータの格納
outFile(data);
}

void getFile(int *cur){
FILE *fp;

fp = fopen(INFILE, "r");
while(fscanf(fp,"%d", cur) != EOF){
cur++;
}

fclose(fp);
}

void outFile(int *cur){
FILE *fp;
int i;

fp = fopen(SORTFILE, "w");

for(i=0; i<COUNT; i++){
fprintf(fp, "%d\n", *(cur+i));
}

fclose(fp);
}

double getFuncTime(clock_t start, clock_t end){
return (double)(end-start)/CLOCKS_PER_SEC;
}

A 回答 (2件)

多分何らかの宿題なのでしょうが、白紙で回答してください。

というか、このベースとなるプログラムを作った人物が出題者であったならばその人物を C 言語の初歩的なことも知らない無知とののしってください。
なぜなら、この仕様(修正できるのは sort_main() 内および sort_main() が呼び出す関数のみ)では実装不可能だからです。

C 言語では関数の引数で配列を渡した場合、渡された先でその配列の長さを知ることはできません。なぜなら、渡された先で見えるのはその配列の最初の要素を指すポインタになっているからです。
ですから、
 void sort_main(int *array)
という関数の内側ではソートを行うべき領域の先頭はわかってもソートを行うべき領域の長さがわかりません。

もしこのベースとなるプログラムをあなたが作ったのなら、sort_main() を以下のいずれかの形にして、それに合わせて sort_main() 以外を書き換えてください。
・void sort_main(int *array, int length)
・void sort_main(int *begin, int *end)
・void sort_main(struct SortData *sort_data)
多分一番上が一番楽だと思います。
……まあ、
 #define COUNT 100000 // データ数を指定
って本気ですかって言いたいところではありますが。
    • good
    • 0

http://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5% …
http://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E% …
言語は違いますが、構造は同じです。
他にも検索すればいくらでも見つかります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!