Advertisement
Guest User

quicksort + a

a guest
Oct 15th, 2019
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. //#pragma warning(disable:4996)
  5. #define N 12
  6. #define M 6
  7.  
  8. typedef struct data{
  9.  
  10.     char _name[128];//球団名
  11.     int _win;//勝利数
  12.     float _winRate;//勝率
  13.     int _point;//得点
  14.     float _hitRate;//打率
  15.     float _defRate;//防御率
  16.  
  17. }Data;
  18.  
  19. /*Data inputData(FILE *Pa, FILE *Se){
  20.     Data x[N];//returndata
  21.     int i;
  22.     //ラベル除去
  23.     char trashBox[N];
  24.     for (i = 0; i < 6; i++) fscanf(Se, "%s %s %s %s %s %s", &trashBox[N], &trashBox[N], &trashBox[N], &trashBox[N], &trashBox[N], &trashBox[N]);
  25.     for (i = 0; i < 6; i++) fscanf(Pa, "%s %s %s %s %s %s", &trashBox[N], &trashBox[N], &trashBox[N], &trashBox[N], &trashBox[N], &trashBox[N]);
  26.  
  27.     //Data構造体型配列にinput
  28.     for (i = 0; i < (N / 2); i++){
  29.         fscanf(Pa, "%s %d %f %d %f %f", &x[i]._name[128], &x[i]._win, &x[i]._winRate, &x[i]._point, &x[i]._hitRate, &x[i]._defRate);
  30.     }
  31.     for (i = N; i < N; i++){
  32.         fscanf(Pa, "%s %d %f %d %f %f", &x[i]._name[128], &x[i]._win, &x[i]._winRate, &x[i]._point, &x[i]._hitRate, &x[i]._defRate);
  33.     }
  34.     for (i = N; i < N; i++){
  35.         printf("%s %d %f %d %f %f", x[i]._name[128], x[i]._win, x[i]._winRate, x[i]._point, x[i]._hitRate, x[i]._defRate);
  36.  
  37.     }
  38.  
  39.     return x[N];//全部のデータを返す
  40. }*/
  41.  
  42. //ソートして出力する関数3つ
  43. void outputWin(Data data[N]){
  44.     Data x[N] = data;
  45.    
  46. }
  47. void outputHit(Data data[N]){
  48.  
  49. }
  50. void outputDefRate(Data data[N]){
  51.  
  52. }
  53. void outputData(Data x[N], int i){
  54.     printf("%10s  %d  %5.2f  %d  %5.2f  %5.2f\n", x[i]._name, x[i]._win, x[i]._winRate, x[i]._point, x[i]._hitRate, x[i]._defRate);
  55. }
  56. void outputRavel(){
  57.     printf("    <Team>  W    WR    R     BA     ERA\n");
  58. }
  59.  
  60.  
  61. int main(){
  62.     //ファイルオープン
  63.     FILE *Pa, *Se;
  64.     fopen_s(&Pa,"PacificLeague2019.txt", "r");
  65.     fopen_s(&Se,"CentralLeague2019.txt", "r");
  66.     while (Pa == NULL || Se == NULL){
  67.         printf("ファイルが開けません\n");
  68.         exit(1);
  69.     }
  70.  
  71.     //入力
  72.     Data x[N];
  73.     int i;
  74.     //ラベル除去
  75.     char Ravel[128];
  76.     fgets(Ravel, 128, Pa);
  77.     fgets(Ravel, 128, Se);
  78.  
  79.     //Data構造体型配列にinput
  80.     for (i = 0; i < M; i++){
  81.         fscanf_s(Pa, "%s %d %f %d %f %f", x[i]._name,N, &x[i]._win, &x[i]._winRate, &x[i]._point, &x[i]._hitRate, &x[i]._defRate);
  82.     }
  83.     for (i = M; i < N; i++){
  84.         fscanf_s(Se, "%s %d %f %d %f %f", x[i]._name,N, &x[i]._win, &x[i]._winRate, &x[i]._point, &x[i]._hitRate, &x[i]._defRate);
  85.     }
  86.  
  87.     outputRavel();
  88.     for (i = 0; i < N; i++){
  89.         outputData(x, i);
  90.     }
  91.  
  92.     //出力
  93.  
  94.     outputWin(x);
  95.     outputHit(x);
  96.     outputDefRate(x);
  97.  
  98. }
  99. //
  100. //
  101. //
  102. //
  103. //
  104. //
  105. #include<stdio.h>
  106.  
  107. /* 値を入れ替える関数 */
  108. void swap (int *x, int *y) {
  109.   int temp;    // 値を一時保存する変数
  110.  
  111.   temp = *x;
  112.   *x = *y;
  113.   *y = temp;
  114. }
  115.  
  116. /***
  117. * pivotを決め、
  118. * 全データをpivotを境目に振り分け、
  119. * pivotの添え字を返す
  120. ***/
  121. int partition (int array[], int left, int right) {
  122.   int i, j, pivot;
  123.   i = left;
  124.   j = right + 1;
  125.   pivot = left;   // 先頭要素をpivotとする
  126.  
  127.   do {
  128.     do { i++; } while (array[i] < array[pivot]);
  129.     do { j--; } while (array[pivot] < array[j]);
  130.     // pivotより小さいものを左へ、大きいものを右へ
  131.     if (i < j) { swap(&array[i], &array[j]); }
  132.   } while (i < j);
  133.  
  134.   swap(&array[pivot], &array[j]);   //pivotを更新
  135.  
  136.   return j;
  137. }
  138.  
  139. /* クイックソート */
  140. void quick_sort (int array[], int left, int right) {
  141.   int pivot;
  142.  
  143.   if (left < right) {
  144.     pivot = partition(array, left, right);
  145.     quick_sort(array, left, pivot-1);   // pivotを境に再帰的にクイックソート
  146.     quick_sort(array, pivot+1, right);
  147.   }
  148. }
  149.  
  150. int main (void) {
  151.   int array[10] = { 2, 1, 8, 5, 4, 7, 9, 0, 6, 3 };
  152.   int i;
  153.  
  154.   printf("Before sort: ");
  155.   for (i = 0; i < 10; i++) { printf("%d ", array[i]); }
  156.   printf("\n");
  157.  
  158.   quick_sort(array, 0, 9);
  159.  
  160.   printf("After sort: ");
  161.   for (i = 0; i < 10; i++) { printf("%d ", array[i]); }
  162.   printf("\n");
  163.  
  164.   return 0;
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement