昇順(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件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
多分何らかの宿題なのでしょうが、白紙で回答してください。
というか、このベースとなるプログラムを作った人物が出題者であったならばその人物を 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 // データ数を指定
って本気ですかって言いたいところではありますが。
No.2
- 回答日時:
http://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E% …
言語は違いますが、構造は同じです。
他にも検索すればいくらでも見つかります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
Excelですべての組合せ(重複組...
-
Excel VBAで並べ替えをしたい
-
n番目に大きい数を求めるアル...
-
構造体配列のソート
-
VB.NETでファイル名順にファイ...
-
C# DataTableの行をソートしてD...
-
ソートのプログラム
-
DataGridViewの複数列を連動し...
-
コレクションの数値をSortで並...
-
(VBA) Dir 関数で取得するファ...
-
excel VBA リストビューの行...
-
数字文字列のソート方法
-
Excel VBA テキストボックス内...
-
ヒープソートについて
-
文字列をソートする方法
-
新しい順のリスト取得
-
配列の問題
-
C# DataGridView のヘッダーセ...
-
C言語 配列の長さの上限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
ファイル名「1.jpg ~10.jpg~...
-
excel VBA の条件をつけての列...
-
リスト構造のソートで悩んでま...
-
C# DataGridView のヘッダーセ...
-
DataGridViewの複数列を連動し...
-
文字列をソートする方法
-
C# DataTableの行をソートしてD...
-
C言語・要素除去
-
Excelですべての組合せ(重複組...
-
VBA基本構文の作り方 2列の...
-
列のどこをクリックしてもソー...
-
excel VBA リストビューの行...
-
あるディレクトリ内のファイル...
-
コレクションの数値をSortで並...
-
数字文字列のソート方法
-
VBScriptで重複レコードを削除...
-
2次元配列を複数項目でソートし...
-
10個の整数を入力して小さい順...
おすすめ情報