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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2012, 15:19   #1
Evielle
Пользователь
 
Регистрация: 23.04.2012
Сообщений: 22
По умолчанию C++, проблема, число перестановок > числа сравнений

Вот такая проблемка. Для массивов разной длины надо найти средние значения перестановок и сравнений, проделав 10 раз функцию shell при рандомном заполнении массива.

Код:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <ctime>
#include <graphics.h>
#include <stdlib.h>


using namespace std;

int shell();
int sdata();

clock_t t0, t1;
int a[10000];
int Compare[10], Time[10], Change[10];
int IM; //IM - размер массива
int CompareCI, ChangeCI;

int sdata()
{
    int i;
    srand(time(0));
    CompareCI=0; ChangeCI=0;
    for(CI=0; CI<10; CI++)
    {
             for(i=0; i<IM; i++) { a[i]=rand(); }
             shell();
    }
    cout<<"Данные для "<<IM<<" элементов:\n";
    cout<<"Среднее значение сравнении: "<<CompareCI/10<<"\nСреднее значение перестановок "<<ChangeCI/10<<"\n"; 
    getch();
    cout<<"\n";
}

int main()
{
    setlocale(LC_ALL,"Russian");

    IM=10; sdata();
    IM=50; sdata();
    IM=100; sdata();
    IM=500; sdata();
    IM=1000; sdata();
    IM=5000; sdata();
    IM=10000; sdata();

    getch();
}


int shell()
{
     t0 = clock();
     int step = IM / 2;
     while (step > 0)
     {
           for (int i = 0; i < (IM - step); i++)
           {
                    CompareCI++; //счетчик сравнений
                    int j = i;
                    while (j >= 0 && a[j] > a[j + step])
                    {
                        ChangeCI++; //счетчик перестановок
                        int temp = a[j];
                        a[j] = a[j + step];
                        a[j + step] = temp;
                        j--; 
                    }
           }
           step = step / 2;
     }
     t1 = clock();
     
     //for(int i=0; i<IM; i++) { cout<<a[i]<<" "; } cout<<"\n";
}
почему так? тут логики я не наблюдаю, к сожалению..
Evielle вне форума Ответить с цитированием
Старый 12.06.2012, 15:26   #2
Evielle
Пользователь
 
Регистрация: 23.04.2012
Сообщений: 22
По умолчанию

Пардон, понял в чем дело!

Тему можно закрывать Это такой ГСЧ, которые делает повторки.
Evielle вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кол-во перестановок и сравнений при сортировках Peek-a-boo Помощь студентам 0 04.11.2010 12:04
Процедура сортировки с подсчётом перестановок и сравнений (Паскаль) Паскалька^^ Помощь студентам 0 17.10.2010 23:35
Даны действительные числа a, h, натуральное число n Масим Помощь студентам 0 24.03.2010 14:28
Подсчитать число сравнений DEADmoroz333 Общие вопросы C/C++ 1 16.12.2009 21:05
дано трехзначное число.вывести число,полученное при перестановки цифр десятков и сотен исходдного числа. Kenny_mackormik Помощь студентам 7 12.03.2009 15:18