Форум программистов, компьютерный форум CyberForum.ru

Задача на Метод сортировки (Слияние) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Смотритель
0 / 0 / 0
Регистрация: 16.12.2008
Сообщений: 19
16.12.2008, 18:32     Задача на Метод сортировки (Слияние) #1
Здравствуйте! Прошу пожалуйста помочь сделать зачетную работу на С++.

Задание:
Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента (в примере ниже, сделано левее минимального, т.е нужно исправить), и имеющие нечетный индекс. Массив В отсрортировать по возрастанию, используя метод слияния. (сортировку тоже нужно доработать или исправить чтобы работало)

Вот пример работы, кто сможет переделать чтобы работало по заданию , сделайте, пожалуйста, очень нужно, иначе зачет не смогу получить

Код
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
  int a[20], b[20]; 
  int n, m;      

  char menu() {
    char ch;
    clrscr();
    while (1) {
	printf("Vibirite Variant:\n");
	printf("1. Generacia\n");
	printf("2. Vvod s klavi\n");
	printf("3. Zagruzka iz faila\n\n");
	printf("0. Vixod\n\n");
	printf("Vvedite nomer punkta*: ");
	ch = getch();
	if (ch == '1' || ch == '2' || ch == '3' || ch == '0')
	return ch;
	clrscr();
	printf("Vi vveli neverniy nomer*.\n\n");
    }
  }

  void generateArray() {
    int i; 
    n = random(19)+2;
    for (i = 0; i < n; i++)
	a[i] = random(20);
  }

  void readArray() {
    int i;
    printf("\nVvedite chislo elementov* n = ");
    scanf ("%d", &n);
    for (i = 0; i < n; i++) {
	printf("Vvedite %d element: ", i+1);
	scanf("%d", &a[i]);
    }
  }

  void loadArray() {
    int i; 
    FILE * fin = fopen("in.txt", "rt");
    fscanf(fin, "%d", &n);
    for (i = 0; i < n; i++)
	fscanf(fin, "%d", &a[i]);
    fclose(fin);
  }

  void writeArrayA() {
    int i; 
    for (i = 0; i < n; i++) {
	printf("%d ", a[i]);
    }
  }

  int FindMin() {
    int i; 
    int num_min, min;
    min = a[0];
    num_min=0;
    for (i = 0; i < n; i++) {
	if (min > a[i]) {
	    num_min = i;
	    min = a[i];
	}
    }
    m=0;
    for (i = 0; i <= num_min; i++) {
	if (i % 2 == 1) {
	    b[m] = a[i];
	    m++;
	}
    }
    return num_min;
  }


  void writeArrayB() {
    int i; //‘зҐвзЁЄ
    for (i = 0; i < m; i++) {
	printf("%d ", b[i]);
    }
  }

  void DeleteArrayA(int col) {
    int i;
    for (i = col; i < n; i++) {
	a[i]=a[i+1];
    }
    n--;
  }

  //Sliyanie
  void merge(int a[], int b[], int c, int d, int e) {

       int p1=c, p2=d, pres=c;

       while (p1 < d && p2 < e)
	    if (a[p1] < a[p2])
		b[pres++] = a[p1++];
	    else
		b[pres++] = a[p2++];
       while (p1 < d)
	    b[pres++]=a[p1++];
       while (p2 < e)
	    b[pres++]=a[p2++];
}

  //Sortirovka
  void Sort(int a[], int n) {

       int *temp, *a2 = a, *b = (int*) malloc (n*sizeof(int)), *b2;
       int c, k = 1, d, e;
       b2=b;

       while (k <= 2*n) {
	    for (c = 0; c < n; c += k*2) {
		 d = c + k < n ? c + k : n;
		 e = c + 2 * k < n ? c + 2 * k : n;
		 merge (a2, b, c, d, e);
	    }
	    temp = a2; a2 = b; b = temp;
	    k *= 2;
      }
      for (c = 0; c < n; c++)
	   a[c] = a2[c];
	   free(b2);
}


  int main() {
    int i; 
    int num_min;
    int ost, d;
    int first, last;
    switch (menu()) {
    case '1':
	randomize();
	generateArray();
	break;
    case '2':
	readArray();
	break;
    case '3':
	loadArray();
	break;
    default:
	return 0;
    }
    printf("\Massiv A posle zapolnenia:\n");
    writeArrayA();
    num_min=FindMin();
    d = 1;
    for (i = 0; i <= num_min; i++) {
	if (d == 1)
	    ost = 1;
	else
	    ost = 0;
	if (i % 2 == ost) {
	    DeleteArrayA(i);
	    num_min--;
	    if (ost == 1)
		d = 0;
	    else
		d = 1;
	}
    }
    printf("\n Massiv B posle zapolnenia:\n");
    writeArrayB();
    printf("\n Massiv A posle udalenia elementov:\n");
    writeArrayA();
    printf("\n");
   // first = 0;
  //  last = m;
    Sort(b, n);
    printf("\Massiv B posle sortirovki:\n");
    writeArrayB();
    return 0;
  }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2008, 18:32     Задача на Метод сортировки (Слияние)
Посмотрите здесь:

C++ Н-ленточное слияние с метод сортировки
C++ Н-ленточное слияние с метод сортировки
C++ Метод сортировки обменом
C++ Метод линейной сортировки
C++ Метод сортировки
C++ Сортировки (пузырек, быстрая, шелл, слияние)
C++ Внешние сортировки. Сортировка слиянием. Простое слияние
Внешние сортировки. Сортировка слиянием. Естественное слияние C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
22.12.2009, 14:59     Задача на Метод сортировки (Слияние) #2
она не компилируется эта работа которая выложена
Yandex
Объявления
22.12.2009, 14:59     Задача на Метод сортировки (Слияние)
Ответ Создать тему
Опции темы

Текущее время: 20:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru