All pastes #837274 Raw Edit

Unnamed

public text v1 · immutable
#837274 ·published 2007-12-29 14:21 UTC
rendered paste body
/* domacak.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGHT 100

void merge(int a[], int b[], int levy, int pravy, int poslPravy) {
  int poslLevy = pravy-1;
  int i = levy;
  int prvniLevy = levy;

  while (levy<=poslLevy && pravy<=poslPravy)
    b[i++] = (a[levy]<a[pravy])? a[levy++] :a [pravy++];

  while (levy<=poslLevy) b[i++] = a[levy++];
  while (pravy<=poslPravy) b[i++] = a[pravy++];
}

int min(int x, int y) {
  if (x<y) return x;
  else     return y;
}

void mergeSort(int a[], int n) {
    int *pom = (int*)malloc(n*sizeof(int)),
        *odkud = a, *kam = pom;
    int delkaUseku = 1;
    int posl = n-1, i;
    while (delkaUseku<n) {
      int levy = 0;
      while (levy<=posl) {
        int pravy = levy+delkaUseku;
        merge(odkud, kam, levy, min(pravy, n), min(pravy+delkaUseku-1, posl));
        levy = levy+2*delkaUseku;
      }
      delkaUseku = 2*delkaUseku;
      int *p = odkud; odkud = kam; kam = p;
    }
    if (odkud!=a)
      for (i=0; i<n; i++) a[i] = pom[i];
  }

int main(void) {
    char retezecX[MAX_LENGHT], retezecY[MAX_LENGHT], poleX[MAX_LENGHT], poleY[MAX_LENGHT]; 
    char retezecXser[MAX_LENGHT], retezecYser[MAX_LENGHT], a[MAX_LENGHT];
    int prvni, druhy;
    char jmenoSouboruX[] = "X.txt";
    char jmenoSouboruY[] = "Y.txt";

    char jmenoSouboruXser[] = "Xser.txt";
    char jmenoSouboruYser[] = "Yser.txt";
        
        /* čtení */
        FILE *souborX; 
        souborX = fopen(jmenoSouboruX, "r");
        fscanf(souborX, "%s", retezecX); 
        FILE *souborY;
        souborY = fopen(jmenoSouboruY, "r"); 
        fscanf(souborY, "%s", retezecY);
        
        /* seřazeni */
        prvni = strlen(retezecX);
        druhy = strlen(retezecY);

        mergeSort(retezecX, prvni);

        mergeSort(retezeY, druhy);
  
        /* výpis */    
        printf("Mnozina X: %s  \n", retezecX); /* měl bych vypsat řetězec seřazenej tendle je neseřazenej*/
        printf("Mnozina Y: %s  \n", retezecY);

        fclose(souborX);
        fclose(souborY);
        fclose(souborXser);
        fclose(souborYser);

    system("PAUSE");
    return 0;
}