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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2014, 02:30   #1
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию Ошибка.Алгоритмы сортировки.Язык си.

Задание: Порядок: по убыванию элементов. Методы: простых вставок, пузырька с ограничением числа проходов, пирамидальная сортировка и qsort(). N1=1000, N2=5000, N3=10000, N4=15000. Критерий – количество перестановок.
Мое решение:
Код:
#include "stdio.h"
#include "stdlib.h"
#include "locale.h"
int const size = 4;
void SVsort(int *, int); // прототип функции сортировки вставки
void SPsort(int *, int); // прототип функции сортировки пузырьком
void SPYsort(int *, int); //пирамидальная сортировка 
int main(int argc, char* argv[])
{
	setlocale(LC_ALL, "rus");
	int array1[4]={500, 1000, 3000, 5000};   // в правильном порядке
	int array2[4]={5000, 3000, 1000, 500};   // в обратном порядке
	int array3[4]={3000, 5000, 500, 1000};   // в неправильном порядке
	int i, j;
	void (*f[4])(int *, int)={SVsort, SPsort, SPYsort};
	printf("Не отсортированный массив:\n");
	for(i=0 ; i<size ; i++)
	{
	printf("%4d", array1[i]);
	printf("\n");
	printf("%4d", array2[i]);
	printf("\n");
	printf("%4d", array3[i]);
    printf("\n");
    f[i](array1, size);
    f[i](array2, size);
    f[i](array3, size);
    printf("Отсортированный массив:\n");
	printf("%4d", array1[i]);
	printf("\n");
	printf("%4d", array2[i]);
	printf("\n");
	printf("%4d", array3[i]);
    printf("\n");
	system("pause");	
}
	return 0;
}
/* сортировка методом вставками */
void insertSort(int *a, int size) 
{
    int i, j, tmp;
    for (i = 1; i < size; ++i) // цикл проходов, i - цикл проходов
    {
        tmp = a[i]; 
        for (j = i - 1; j >= 0 && a[j] > tmp; --j) // поиск места элемента в готовой последовательности 
            a[j + 1] = a[j];    // сдвигаем элементы направо, пока не дошли
        a[j + 1] = tmp; // место найдено, вставить элемент 
    }
}
/* сортировка пузырьком */
int SPVsort(char *items, int count)
{
  register int a, b;
  register char t;

  for(a=1; a < count; ++a)
    for(b=count-1; b >= a; --b) {
      if(items[b-1] > items[b]) {
        /* exchange elements */
        t = items[b-1];
        items[b-1] = items[b];
        items[b] = t;
      }
    }
}
/* пирамидальная сортировка */
void PYsort(int a[], int n) {
int i, temp;
for(i=n/2-1; i >= 0; i--) down_heap(a, i, n);
for(i=n-1; i > 0; i--) 
      {
      temp=a[i]; a[i]=a[0]; a[0]=temp;
      down_heap(a, 0, i);
      }
}
Список ошибок:
East Undia Trading вне форума Ответить с цитированием
Старый 11.04.2014, 09:17   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Цитата:
void SPYsort(int *, int); //пирамидальная сортировка

Цитата:
/* пирамидальная сортировка */
void PYsort(int a[], int n) {
int i, temp;
for(i=n/2-1; i >= 0; i--) down_heap(a, i, n);
for(i=n-1; i > 0; i--)
{
temp=a[i]; a[i]=a[0]; a[0]=temp;
down_heap(a, 0, i);
}
}
Они у тебя не реализованы
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 12.04.2014, 14:20   #3
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Разобрался.Еще такой вопрос, как можно красиво выводить в виде таблицы?Я не нашел хорошего материала в интернете.У меня вот так одномерный массив выводит.
East Undia Trading вне форума Ответить с цитированием
Старый 09.05.2014, 16:49   #4
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию


Кто-нибудь знает, такой результат сортировок похож на правду?
East Undia Trading вне форума Ответить с цитированием
Старый 09.05.2014, 16:57   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Случайными..

Вставки должны быть примерно равны пузырю
А пирамидальная должна быть примерна равна быстрой
На правду похож только 3-ий вариант.. и то не очень..
Poma][a вне форума Ответить с цитированием
Старый 09.05.2014, 18:24   #6
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Так тоже ерунда?

Да, уже понял что не то.

Последний раз редактировалось East Undia Trading; 09.05.2014 в 18:35.
East Undia Trading вне форума Ответить с цитированием
Старый 14.05.2014, 22:42   #7
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Где еще перестановки нужно запоминать?Язык си
Код:
int StraightInsertionSort( int *m, int n ) 
{
	int i, j, temp, col1=0;
    for (i = 1; i < n; i++)
    {
        temp = m[i];
    for (j = i - 1; j >= 0; j--)
    {
        if (m[j] < temp)
            break;
 
        m[j + 1] = m[j];
        m[j] = temp;
        col1+=2;   //тут и ?
    }
}
    return col1;
}
East Undia Trading вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить эффективность алгоритмов шейкерной сортировки и сортировки слиянием (язык C) Ольга210993 Помощь студентам 2 20.09.2012 13:52
Алгоритмы сортировки пирамидальный(кучей) и быстрой сортировки (с++) mmd12 Помощь студентам 4 17.05.2012 14:14
Алгоритмы сортировки массивов С++ Sunless Помощь студентам 1 29.03.2011 17:10
C++ алгоритмы сортировки 1ok Помощь студентам 5 18.09.2010 15:27
Алгоритмы сортировки и поиска информации jedi1990 Помощь студентам 1 22.09.2009 12:35