C言語で、挟み込み法を用いた昇順ソーティングを実行する関数(sort_func)を実装しています。
しかし、ソーティングが正しく行われていないようです。
原因がわからないため、教えていただけると幸いです。
#include <stdio.h> #include <stdlib.h> #define MAXDATA 10 static int number[MAXDATA]; int input_file(char *input_name); void output_file(char *output_name,int n, int number[]); void sort_func(int number[],int n); int main(int argc,char *argv[]) {/*agrv[1]は入力ファイル名、[2]は出力ファイル名*/ int n; if(argc != 3){/*ファイルは2つのみ*/ printf("入力ファイルと出力ファイルのみを指定してください.\n"); return 1; } n = input_file(argv[1]); sort_func(number,n); output_file(argv[2],n,number); return 0; } int input_file(char *input_name){/*入力ファイル名を受け取り、ファイルをオープンして読み込み、配列に格納し、配列の個数を返す*/ int count = 0, temp; FILE *fp; if((fp = fopen(input_name,"r")) == NULL){ printf("入力ファイルをオープンできませんでした。\n"); } while(fscanf(fp,"%d",&temp)==1){ if(count >= MAXDATA){ printf("エラー:整数は1個以上10個以下\n"); return 1; } number[count++] = temp; } printf("入力ファイルの処理完了。\n"); fclose(fp); return count; } void output_file(char *output_name, int n, int number[]){/*出力ファイル名を受け取り、ファイルをオープンして、配列の内容をファイルに書き込む*/ FILE *fp; int i; if((fp = fopen(output_name,"w")) == NULL){ printf("出力ファイルをオープンできませんでした。\n"); }else{ printf("書き込みに成功しました。\n"); for(i=0;i<n;i++){ fprintf(fp,"%d ",number[i]); } } fclose(fp); } void sort_func(int number[],int n){/*挟み込み法で昇順ソートする関数*/ int k,x,m,y; for(k=0;k<n;k++){ if(number[k-1]>number[k]){/*1.昇順になっていない配列の要素(number[i])を特定して、xに代入*/ x = number[k]; for(m=0;m<k;m++){/*2.特定した要素が入り込むのにふさわしい場所(m)を特定して、yに代入*/ if(number[m]>x){ y = m; while(y==k-1){/*3.入り込ませるためにもともとの要素を一つずつずらしていく*/ number[y+1] = number[y]; y++; } number[y] = x;/*4.ふさわしい場所に要素を入れ込む*/ } } } } printf("要素を昇順にソートしました。\n"); }
> ソーティングが正しく行われていないようです。
具体的に, どのようなデータをソートしようとしてどうなったのかを追記して頂けますか. コードをコピペすれば動かせる状態ですと, 現状と修正が共有・確認出来ますのでなお良いかと思います。
回答2件
あなたの回答
tips
プレビュー