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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2016, 23:49   #1
fufayka
 
Регистрация: 09.11.2016
Сообщений: 6
По умолчанию Язык С. Нужно уменьшить время работы программы

Здравствуйте! Помогите, пожалуйста. Нужно уменьшить время выполнения программы, как это можно сделать? заранее спасибо!
Код:
#include<stdio.h>

int main()
{
    int n, i, j, t1, t2, t3, lasttime;
    int a[10001] = {0}, b[10001] = {0}, k[100001] = {0}, l[100001] = {0};

    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);

    scanf("%d", &n);
    for(i = 1; i <= n; i++){
        scanf("%d", &a[i]);
        k[i] = i;
    }
    for(i = 1; i <= n; i++)
        scanf("%d", &b[i]);

    for(i = 1 ; i <= n - 1; i++) {
       for(j = 1; j <= n - i; j++) {
           if(b[j] > b[j+1]) {
                t1 = a[j];
                t2 = b[j];
                t3 = k[j];
                a[j] = a[j+1];
                b[j] = b[j+1];
                k[j] = k[j+1];
                a[j+1] = t1;
                b[j+1] = t2;
                k[j+1] = t3;
           }
       }
    }

    j = 1;
    l[1] = k[1];
    lasttime = b[1];
    for(i = 2; i <= n; i++){
        if(a[i] >= lasttime) {
           j++;
           l[j] = k[i];
           lasttime = b[i];
         }
    }
    printf("%d\n", j);
    for(i = 1; i <= j; i++){
       printf("%d ", l[i]);
    }
    return 0;
}
fufayka вне форума Ответить с цитированием
Старый 09.11.2016, 23:54   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
    for(i = 1 ; i <= n - 1; i++) {
       for(j = 1; j <= n - i; j++) {
           if(b[j] > b[j+1]) {
                t1 = a[j];
                t2 = b[j];
                t3 = k[j];
                a[j] = a[j+1];
                b[j] = b[j+1];
                k[j] = k[j+1];
                a[j+1] = t1;
                b[j+1] = t2;
                k[j+1] = t3;
           }
       }
    }
замени это на др. алгоритм сортировки... судя по беглому просмотру кода, только это тут может тормозить ощутимо
GreenWizard вне форума Ответить с цитированием
Старый 10.11.2016, 15:20   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Алгоритм достаточно эффективный, несмотря что простой. Улучшить его можно - глянь в Вики "Сортировка пузырьком" . Там если во внутреннем цикле не было ни одной перестановки - финиш, дальше внешний цикл можно не крутить, уже все ОК.
Его можно еще улучшить :
Код:
 kc = n-1 ; 
 for(i = 1 ; i <= n - 1; i++)
 {   
       for(j = 1; j <= kc; j++)
      {
           if(b[j] > b[j+1])
             {
                t1 = a[j];
                t2 = b[j];
                t3 = k[j];
                a[j] = a[j+1];
                b[j] = b[j+1];
                k[j] = k[j+1];
                a[j+1] = t1;
                b[j+1] = t2;
                k[j+1] = t3;
                np = 1 ;
             } ;
         else np++ ;
     }
   kc = kc - np ;
 }
смысл: если во внутреннем цикле и были перестановки, но на последних np шагах их не было, то число повторений следующнго внутреннего цикла уже можно уменьшить на np ;

Последний раз редактировалось digitalis; 11.11.2016 в 11:10. Причина: дополнение
digitalis вне форума Ответить с цитированием
Старый 11.11.2016, 19:41   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Маленькое дополнение :
Код:
 for(i = 1 ; i <= n - 1; i++)
 {    np := 0 ;
       for(j = 1; j <= kc; j++)
digitalis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время работы программы. Skrillex9666 БД в Delphi 7 10.01.2014 11:41
как уменьшить время работы программы 22hope22 C# (си шарп) 9 26.05.2013 21:41
ошибка во время работы программы geologg Общие вопросы C/C++ 4 20.04.2012 22:07
Время Работы Программы shilovec5377 Общие вопросы Delphi 1 17.04.2012 17:15
Время работы программы Magist Компоненты Delphi 5 24.10.2009 20:52