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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Смотритель
0 / 0 / 0
Регистрация: 16.12.2008
Сообщений: 19
#1

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

16.12.2008, 18:32. Просмотров 1944. Ответов 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;
  }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2008, 18:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача на Метод сортировки (Слияние) (C++):

Н-ленточное слияние с метод сортировки - C++
Осуществить программную реализацию сортировки информации заданного вида сбаланси-рованным N-ленточным слиянием (в оперативной памяти),...

Н-ленточное слияние с метод сортировки - C++
Осуществить программную реализацию сортировки информации заданного вида сбаланси-рованным N-ленточным слиянием (в оперативной памяти),...

Сортировки (пузырек, быстрая, шелл, слияние) - C++
Доброго дня. Имеется программа сортировок пузырьком, быстрая, шеллом, слиянием. Нужно расчитать время. Размеры массива 10, 100, 1000,...

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя) - C++
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода сортировки для массива из 10000 элементов, результаты...

Внешние сортировки. Сортировка слиянием. Простое слияние - C++
Пом-гите решить, заранее благодарен.)) Билет 8 1 .Внешние сортировки. Сортировка слиянием. Простое слияние. 2 Решить задачу: ...

Внешние сортировки. Сортировка слиянием. Естественное слияние - C++
Пом-гите решить, заранее благодарен.)) Билет 9 1 .Внешние сортировки. Сортировка слиянием. Естественное слияние. 2 Решить...

1
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
22.12.2009, 14:59 #2
она не компилируется эта работа которая выложена
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2009, 14:59
Привет! Вот еще темы с ответами:

Изменить метод "быстрой сортировки" на метод "сортировки вставками" - C++
Как изменить метод &quot;интеративной быстрой сортировки&quot; на метод &quot;сортировки вставками «с конца массива»&quot;? Нужно изменить только метод...

Метод сортировки - C++
Доброго времени суток господа, имеется программа которая сортирует массив(состоящий из 0 и 1), так чтобы в начале были 0, а потом 1....

Метод поразрядной сортировки. - C++
Помогите решить задачу, для её решения необходимо реализовать метод поразрядной сортировки, отсортировав последовательность в порядке...

Метод линейной сортировки - C++
Помогите решить задачу. Даны n эл-ов упорядочить массив по возрастанию. #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru