Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2008, 00:27   #1
Smotritel89
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 10
По умолчанию Задача на Метод сортировки

Помогите пожалуйста, нужно срочно решить последнюю зачетную работу на Borland C++, не могу разобратся в сортировке методом слияния

Вот пример одно варианта:

Ввести массив А. В массив В перенести все элементы массива А, стоящие левее минимального элемента, и имеющие нечетный индекс. Массив В отсрортировать по убыванию, используя быструю сортировку.
Код:
#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("‚лЎҐаЁвҐ ®¤Ё* Ё§ ў*аЁ**в®ў:\n");
	printf("1. ѓҐ*Ґа*жЁп б«гз*©*ле §**зҐ*Ё©\n");
	printf("2. ‚ў®¤ ¬*ббЁў* б Є«*ўЁ*вгал\n");
	printf("3. ‡*Јаг§Є* н«Ґ¬Ґ*в®ў Ё§ д*©«*\n\n");
	printf("0. ‚л室 Ё§ Їа®Ја*¬¬л\n\n");
	printf("‚ўҐ¤ЁвҐ *®¬Ґа ўлЎа***®Ј® Їг*Єв*: ");
	ch = getch();
	if (ch == '1' || ch == '2' || ch == '3' || ch == '0')
	return ch;
	clrscr();
	printf("‚л ўўҐ«Ё *ҐўҐа*л© *®¬Ґа ў*аЁ**в*.\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("\n‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® н«Ґ¬Ґ*в®ў ¬*ббЁў* n = ");
    scanf ("%d", &n);
    for (i = 0; i < n; i++) {
	printf("‚ўҐ¤ЁвҐ %d н«Ґ¬Ґ*в: ", i+1);
	scanf("%d", &a[i]);
    }
  }

  //‡*Јаг§Є* ¬*ббЁў* A Ё§ д*©«* in.txt
  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);
  }

  //‚лў®¤ ¬*ббЁў* A ** нЄа**
  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;
  }

  //‚лў®¤ ¬*ббЁў* B ** нЄа**
  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--;
  }

  //‘®авЁа®ўЄ* ¬*ббЁў* ‚
  void Sort(int first, int last) {
    int p;
    int lastS1, firstUn;
    int temp;
    int i;
    p = b[first];
    lastS1 = first;
    firstUn = first+1;
    while (firstUn <= last) {
	  if (b[firstUn] > p) {
	      temp = b[firstUn];
	      b[firstUn] = b[lastS1+1];
	      b[lastS1+1] = temp;
	      lastS1++;
	      firstUn++;
	  } else
	      firstUn++;
    }
    for (i = first; i < lastS1; i++)
	b[i] = b[i+1];
    b[lastS1]=p;
    if (lastS1-1 > first)
	Sort(first, lastS1-1);
    if (firstUn-1 > lastS1+1)
	Sort(lastS1+1, firstUn-1);
  }

  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("\nЊ*ббЁў A Ї®б«Ґ §*Ї®«*Ґ*Ёп:\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Њ*ббЁў B Ї®б«Ґ §*Ї®«*Ґ*Ёп:\n");
    writeArrayB();
    printf("\nЊ*ббЁў A Ї®б«Ґ г¤*«Ґ*Ёп н«Ґ¬Ґ*в®ў:\n");
    writeArrayA();
    printf("\n");
    first = 0;
    last = m;
    Sort(first, last);
    printf("\nЊ*ббЁў B Ї®б«Ґ б®авЁа®ўЄЁ:\n");
    writeArrayB();
    return 0;
  }
А нужно мой вариант:

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

Варианты слегка похожи.. кто сможет помочь?

P.S надписи буду на русском при открытии в С++..

Модератор: тег CODE

Последний раз редактировалось MaTBeu; 16.12.2008 в 00:53.
Smotritel89 вне форума Ответить с цитированием
Старый 16.12.2008, 00:55   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Товарищ, я вам настоятельно не рекомендую в BORLANDC писать кириллицей. Всеравно нормально не отобразиться, а код портит ой как.
MaTBeu вне форума Ответить с цитированием
Старый 19.12.2008, 17:33   #3
Djone
 
Регистрация: 19.12.2008
Сообщений: 3
По умолчанию

smotritel89
напиши че за метод слияния и я напишу те прогу!!!!
Djone вне форума Ответить с цитированием
Старый 19.12.2008, 18:16   #4
Djone
 
Регистрация: 19.12.2008
Сообщений: 3
По умолчанию

Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
clrscr();
int A[100],B[100],max,C[100],L;
int i,k=0,m,n,l,j;
printf("Vvedite kol elementov\n");
scanf("%d",&n);
printf("vvedite massiv\n");
for (i=0;i<n;i++)
scanf("%d",&A[i]);
max=A[0];
m=0;
for (i=0;i<n;i++)
if (A[i]>max)
{
max=A[i];
m=i;
}
for (i=m;i<n;i++)
if (fmod(i,2)==0)
{
B[k]=A[i];
k=k+1;
}
for (i=0;i<m;i++)
C[i]=A[i];
l=i;
for (i=m;i<n;i++)
if (fmod(i,2)!=0)
{
C[l]=A[i];
l=l+1;
}
printf("\nMassiv A\n");
for (i=0;i<n;i++)
printf("%d ",A[i]);
printf("\nMassiv B\n");
for (i=0;i<k;i++)
printf("%d ",B[i]);
printf("\nMassiv A posle preobrazovania\n");
for (i=0;i<l;i++)
printf("%d ",C[i]);
for (j=0;j<k;j++)
for (i=0;i<k-1;i++)
if (B[i]>B[i+1])
{
L=B[i];
B[i]=B[i+1];
B[i+1]=L;
}
printf("\nMassiv B posle sortirovki\n");
for (i=0;i<k;i++)
printf("%d ",B[i]);
getch();
}
Модератор: тег CODE забыл

Последний раз редактировалось MaTBeu; 19.12.2008 в 21:18.
Djone вне форума Ответить с цитированием
Старый 19.12.2008, 18:17   #5
Djone
 
Регистрация: 19.12.2008
Сообщений: 3
По умолчанию

немного проще чем ты скинул
Djone вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировки в BP 7 ! wArRrrr Помощь студентам 2 07.10.2008 18:56
Вывод сортировки MaXiS Общие вопросы Delphi 5 19.05.2008 08:48
транспортная задача. метод потенциалов 4eKucT Помощь студентам 5 01.06.2007 16:30
Сортировки в БД. Шурик БД в Delphi 4 15.05.2007 17:45