Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Quicksort, сортировка массива по возрасанию 
:(
    Опции темы
Sheismydream
Дата 4.4.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 4.4.2007

Репутация: нет
Всего: нет



Условия:
Ограничение времени на тест: 4 сек 
Ограничение памяти на тест: 200 Мб 
Входной файл: input.txt 
Выходной файл: output.txt   
 Входной файл содержит число n (кол-во элементов массива) затем собственно элементы.
Выходной файл должен содержать отсортированные по возрастанию эл-ты
 ограничения : 1<=n<=1000000      
 -2147483648<=a[i]<=2147483647

Основная проблема - программа массив сортирует, но не укладывается по скорости в 4 секунды. Как максимально увеличить скорость сортировки простыми средствами для данного алгоритма?

Код

#include <iostream> 
using namespace std;
#include <fstream> 

void sort(long a[],long high, long low)

{
    long i, j, p, temp;
    
    i=low;
    j=high;
    p=a[(low+high)/2];

do
{
    while (a[i]<p) i++;


    while (a[j]>p) j--;

if(i<=j)

{
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
    i++;
    j--;
}
}

while (i<=j);

if(j>low) sort(a, j, low);

if(high>i) sort(a, high, i);

}

void main()
{
    ifstream in("input.txt");

    long n, i, k;
    in>>n;
    long *a=new long[n];    
    for(k=0; k<n; k++)
    {in>>a[k];}
in.close();

sort(a, n-1, 0);

ofstream out("output.txt");
for(i=0; i<n; i++)
{out<<a[i]<<' ';}
out.close();
delete []a;

}

PM MAIL   Вверх
MBo
Дата 4.4.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: 7
Всего: 18



странный какой-то квиксорт... Элемент-разделитель у тебя только номинальный, а рекурсивные вызовы должны производиться для двух "половинок", не включая разделительный элемент (т.е. каждый раз для меньшего числа элементов)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.