#1
by kazukazukazu » 4年前
大学の課題で、クイックソートを使ってテキストファイル内の数値昇順に並び替え、別のファイルに出力するという問題が出ました。sort_main関数でどうしてもエラーが起きてしまうのですが、どう直せばいいでしょか。
コード:
include <stdio.h>
#include <time.h>
// 定数宣言
#define COUNT 100000 // データ数を指定
#define INFILE "08sort.txt" // 入力ファイルを指定
#define SORTFILE "out1.txt" // 出力ファイルを指定
void sort_main(int *array);
void getFile(int *);
void outFile(int *);
double getFuncTime(clock_t, clock_t);
// ソート(並び替え)メイン関数
void sort_main(int *array){
int *left;
int *right;
int mid=array[left],i=left+1,j=right;
for(;;){
while(i<j && array[i] <=mid )i++;
while(array[j] > mid)j--;
if(i>j || array[i] == array[j])break;
swap(i,j);
}
swap(left,j);
if(left<j-1)quick_sort(array,left,j-1);
if(j+1<right)quick_sort(array,j+1,right);
}
// プログラムのメイン関数
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;
}
大学の課題で、クイックソートを使ってテキストファイル内の数値昇順に並び替え、別のファイルに出力するという問題が出ました。sort_main関数でどうしてもエラーが起きてしまうのですが、どう直せばいいでしょか。
[code]
include <stdio.h>
#include <time.h>
// 定数宣言
#define COUNT 100000 // データ数を指定
#define INFILE "08sort.txt" // 入力ファイルを指定
#define SORTFILE "out1.txt" // 出力ファイルを指定
void sort_main(int *array);
void getFile(int *);
void outFile(int *);
double getFuncTime(clock_t, clock_t);
// ソート(並び替え)メイン関数
void sort_main(int *array){
int *left;
int *right;
int mid=array[left],i=left+1,j=right;
for(;;){
while(i<j && array[i] <=mid )i++;
while(array[j] > mid)j--;
if(i>j || array[i] == array[j])break;
swap(i,j);
}
swap(left,j);
if(left<j-1)quick_sort(array,left,j-1);
if(j+1<right)quick_sort(array,j+1,right);
}
// プログラムのメイン関数
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;
}
[/code]