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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2013, 21:08   #1
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию сортировка массива

Как отсортировать массив по неубыванию с наименьшей затратой времени
22hope22 вне форума Ответить с цитированием
Старый 27.05.2013, 21:35   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Был какой то метод... кажется, Array.Sort(). Посмотрите - может, это оно?
Abstraction вне форума Ответить с цитированием
Старый 27.05.2013, 21:37   #3
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

я как раз его и пробовала, нужно что-то побыстрее
22hope22 вне форума Ответить с цитированием
Старый 27.05.2013, 21:45   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Я думаю, что проблема кроется глубже, чем просто в выборе сортировки. Надеюсь, что в C# реализация Array.Sort() достаточно быстра.
Помню задачу на форуме, когда она не проходила из-за каких-то долей секунды. Обсуждаемый кусочек кода был максимально оптимизирован, но все равно не проходил. Когда руки уже опустились, ТС показал весь код, и оказалось, что в необсуждавшемся коде были логические ошибки. После их исправления программа стала в 100 раз быстрее.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 27.05.2013, 22:46   #5
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

вот и у меня уже эти руки опускаются
22hope22 вне форума Ответить с цитированием
Старый 27.05.2013, 23:02   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вы приведите условие задачи, Ваше решение, и как она прошла тесты.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 27.05.2013, 23:20   #7
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

Исходные данные
В первой строке содержится число N — количество записей в списке преподавателя. 1 ≤ N ≤ 15000. Затем идет N строк, содержащих список преподавателя, по одной дате в строке. Записаны только года. Каждый год — целое число в пределах от 1 до 109. Даты в этом списке отсортированы по неубыванию. В следующей после списка строке содержится число M — количество записей в списке студента, 1 ≤ M ≤ 106. Затем также M строк с датами (записаны только года, каждый год — целое число в пределах от 1 до 109). Этот список не отсортирован. В списке как студента, так и преподавателя даты могут повторяться.
Результат
Вы должны вывести одно число — количество чисел во втором списке, которые также содержатся в первом.
Пример
исходные данные
2
1054
1492
4
1492
65536
1492
100
результат
2


int n1 = int.Parse(Console.ReadLine());
int[] a = new int[n1];
for (int i = 0; i < n1; i++)
{
a[i] = int.Parse(Console.ReadLine());
}

int n2 = int.Parse(Console.ReadLine());
int[] b = new int[n2];
for (int j = 0; j < n2; j++)
{
b[j] = int.Parse(Console.ReadLine());
}
int k = 0;
for (int j = 0; j < b.Length; j++)
{
for (int i = 0; i < a.Length; i++)
{
if (b[j] == a[i])
{
k++;
break;
}
}
}
Console.WriteLine(k);


завалилась на 8 тесте. Время работы программы 2.046 а надо не более 2
22hope22 вне форума Ответить с цитированием
Старый 27.05.2013, 23:21   #8
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

сортировку массива совсем убрала но ничего не изменилось
22hope22 вне форума Ответить с цитированием
Старый 28.05.2013, 00:10   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Я же просил добавить бинпоиск
Попробуйте (не проверял, так как нет C# компилятора под рукой - не пишу на C#):
Код:
int n1 = int.Parse(Console.ReadLine());
int[] a = new int[n1];
int n3 = 1;
int tmp;
a[0] = int.Parse(Console.ReadLine());
for (int i = 1; i < n1; i++) {
  tmp = int.Parse(Console.ReadLine());
  if (tmp != a[n3 - 1]) {
    a[n3] = tmp;
    n3++;
  }
}
Array.Resize(ref a, n3);
int[] c = new int[n3];
for (int i = 0; i < n3; i++) {
  c[i] = 0;
}
int n2 = int.Parse(Console.ReadLine());
int k = 0;
for (int j = 0; j < n2; j++) {
  tmp = int.Parse(Console.ReadLine());
  tmp = Array.BinarySearch(a, tmp);
  if (tmp >= 0 && c[tmp] == 0) {
    k++;
    c[tmp] = 1;
  }
}
Console.WriteLine(k);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 28.05.2013 в 00:12.
BDA на форуме Ответить с цитированием
Старый 28.05.2013, 13:01   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Проверил решение - оказалось, что немного его усложнил, и достаточно:
Код:
int n1 = int.Parse(Console.ReadLine());
int[] a = new int[n1];
int n3 = 1;
int tmp;
a[0] = int.Parse(Console.ReadLine());
for (int i = 1; i < n1; i++) {
  tmp = int.Parse(Console.ReadLine());
  if (tmp != a[n3 - 1]) {
    a[n3] = tmp;
    n3++;
  }
}
Array.Resize(ref a, n3);
int n2 = int.Parse(Console.ReadLine());
int k = 0;
for (int j = 0; j < n2; j++) {
  tmp = int.Parse(Console.ReadLine());
  tmp = Array.BinarySearch(a, tmp);
  if (tmp >= 0)
    k++;
}
Console.WriteLine(k);
0.625 секунд

Или совсем короткий вариант:
Код:
int n1 = int.Parse(Console.ReadLine());
int[] a = new int[n1];
for (int i = 0; i < n1; i++) {
  a[i] = int.Parse(Console.ReadLine());
}
int n2 = int.Parse(Console.ReadLine());
int k = 0;
for (int j = 0; j < n2; j++) {
  int tmp = int.Parse(Console.ReadLine());
  tmp = Array.BinarySearch(a, tmp);
  if (tmp >= 0)
    k++;
}
Console.WriteLine(k);
0.578 секунд
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 28.05.2013 в 13:13.
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
Сортировка массива Weyner Помощь студентам 2 23.10.2010 08:32
сортировка массива ts-alan Общие вопросы C/C++ 7 08.08.2010 01:47
Сортировка массива gellalo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.05.2010 18:27