Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 20
1

Сортировка массива с помощью Класса-прототипа List<>

26.03.2011, 22:39. Показов 2930. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую! Товарищи, нужна помощь в написании простенькой программы. Программа должна считывать данные из текстового файла и сортировать содержимое по возрастанию. Изменение самих файлов не требуется, так как меня интересует только время, за которое массив будет отсортирован. Но обязательно нужно использовать метод сортировки List.Sort(). Мои нароботки(считывание данных из файла):
C#
1
2
3
4
5
 
StreamReader file = new StreamReader(dir + F.Name);
                    char[] razdel = new char[] { ' ' };
                    List<int> mas = new List<string>(file.ReadToEnd().Split(razdel, StringSplitOptions.RemoveEmptyEntries)).ConvertAll<int>(String2int);
                    file.Close();
Заранее благодарю!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2011, 22:39
Ответы с готовыми решениями:

Сортировка массива объектов, созданных с помощью класса
Ниже приведен мой код программы описывающий &quot;телефонный справочник&quot;, в котором каждый объект описан...

Сортировка List состоящего из своего класса
Основная задача сделать сортировку по столбца в DataGridView, данные которого хранятся в...

Сортировка в std::list состоящем из объектов класса
Добрый день. Вопрос в следующем. Допустим у нас есть некий класс A и класс B. В классе B есть list...

Создание класса-прототипа
Помогите пожалуйста! У меня был мой класс для работы с комплексными числами, теперь его надо...

10
6280 / 3565 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
26.03.2011, 22:58 2
C#
1
2
3
4
5
long start = System.Environment.TickCount;
mas.Sort();
long end = System.Environment.TickCount;
long result = end - start;
Console.WriteLine("Отсортирован за: " + result);
1
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 20
27.03.2011, 12:49  [ТС] 3
К сожалению в результате пишет, что "Отсортирован за: 0". Проверял сортировку с помощью простых операций (алгоритм бинарных вставок) всё работает, а этот метод выдаёт 0 (

Добавлено через 12 часов 44 минуты
Ребята очень нужна помощь, завтра прям край нужно это сделать, плиз!(
0
289 / 234 / 33
Регистрация: 09.02.2011
Сообщений: 435
27.03.2011, 13:06 4
Считай с файла и отсортируй не один раз, а 10(допустим в цикле), а потом полученное время раздели на 10. У меня была такая же ситуация, когда в универе решал задачу о ханойских башнях и таймер тоже показывал 0. Когда ты засекаешь время, то число получается сильно маленькое и выводит 0, а так полученное время разделишь на 10.0 и положи в дабл
0
21 / 21 / 3
Регистрация: 11.07.2010
Сообщений: 63
27.03.2011, 13:17 5
Используйте System.Diagnostics.StopWatch, он дает возможность измерять в милисекундах и даже тиках.
1
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 20
27.03.2011, 14:29  [ТС] 6
C#
1
2
3
4
5
6
7
8
 long start = System.Environment.TickCount;                    
                    for (int coun = 0; coun < 10; coun++)
                    {
                        mas.Sort();
                    }
                    long end = System.Environment.TickCount;
                    long result = (end - start)/10;
                    Console.WriteLine("Отсортирован за: " + result);
Подскажите пожалуйста, почему на этом шаге он всё равно выдаёт 0. При использовании System.Diagnostics.StopWatch он вроде считает время в цикле верно, но как результат счётчика поделить на 10 (так как цикл прогоняет сортировку 10 раз)?
0
289 / 234 / 33
Регистрация: 09.02.2011
Сообщений: 435
27.03.2011, 14:34 7
Если он тебе возвращает время сортировки 5 миллисекунд и ты их делишь на 10, то получишь 0,5, а тип у тебя лонг. Вот ты и получаешь 0. Сделай тип дабл
0
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 20
27.03.2011, 14:46  [ТС] 8
А всё равно выдаёт 0! Хоть ты тресни! Вот полный текст программы, может там ошибка, посмотрите пожалуйста, люди добрые
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;
 
namespace ConsoleApplication1
{
    class Program
    {
        public static int String2int(string s)
        {
            return Convert.ToInt32(s);
        }
        public static string Int2string(int c)
        {
            return Convert.ToString(c);
        }
 
        static void Main()
        {
            try
            {
                StreamWriter f1 = new StreamWriter(@"D:\text1.doc"), f2 = new StreamWriter(@"D:\text2.doc"), f3 = new StreamWriter(@"D:\text3.doc");
                string st = " |   length   |     I      |     N     |           Time            | ";
                f1.WriteLine(st); f2.WriteLine(st); f3.WriteLine(st);
                string dir = @"D:\F_SORT\";
                DirectoryInfo dir1 = new DirectoryInfo(dir);
                FileInfo[] files = dir1.GetFiles();
 
                foreach (FileInfo F in files)
                {
                    string L = F.Name.Substring(0, 4);
                    string I = F.Name.Substring(5, 3);
                    string C = F.Name.Substring(9, 1);
 
                    StreamReader file = new StreamReader(dir + F.Name);
                    char[] razdel = new char[] { ' ' };
                    List<int> mas = new List<string>(file.ReadToEnd().Split(razdel, StringSplitOptions.RemoveEmptyEntries)).ConvertAll<int>(String2int);
                    file.Close();
                    //Stopwatch t = new Stopwatch();
 
 
                    int N = mas.Count;
                    Console.WriteLine(N);
                    double start = System.Environment.TickCount;                    
                    for (int coun = 0; coun < 10; coun++)
                    {
                        mas.Sort();
                    }
                    double end = System.Environment.TickCount;
                    double result = (end - start);
                    Console.WriteLine("Отсортирован за: " + result);
                    /*t.Start();
                    for (int coun = 0; coun < 10; coun++ )
                    {
                        mas.Sort();
                    }
 
 
                    t.Stop();*/
 
                    if (Convert.ToInt16(C) == 1)
                        f1.WriteLine(" |    {0}    |     {1}     |     {2}     |      {3}     | ", L, I, C, result);
                    if (Convert.ToInt16(C) == 2)
                        f2.WriteLine(" |    {0}    |     {1}     |     {2}     |      {3}     | ", L, I, C, result);
                    if (Convert.ToInt16(C) == 3)
                        f3.WriteLine(" |    {0}    |     {1}     |     {2}     |      {3}     | ", L, I, C, result);
                }
                f1.Close(); f3.Close();
                f2.Close();
            }
            catch (FileNotFoundException e)
            {
                Console.WriteLine("Нет файла " + e.Message); return;
            }
            catch (FormatException e)
            {
                Console.WriteLine(e.Message); return;
            }
 
        }
    }
}
0
289 / 234 / 33
Регистрация: 09.02.2011
Сообщений: 435
27.03.2011, 14:54 9
Попробуй увеличить количество циклов(не 10, а поставь намного больше). Если нет, то посмотри что у тебя в массиве mas лежит после парсинга файла. Может он пустой? Выведи на консоль и посмотри
1
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 20
27.03.2011, 15:15  [ТС] 10
Спасибо огромное!!! Увеличел счётчик до 1000 и процесс пошёл Кстати у меня вопрос если в mas помещаются числа, а mas.Sort сортирует их по возрастанию, то как сделать так, чтобы он сортировал их по убыванию. Я думаю нужно писать IComparer но может вы знаете другой более эффективный способ!

P.S. Товарищу dzjundzja88 и Петррр особый респект! Спасибо nicolaus2 за альтернативный метод рассчёта времени!
0
145 / 129 / 27
Регистрация: 20.12.2010
Сообщений: 242
28.03.2011, 13:41 11
Кстати у меня вопрос если в mas помещаются числа, а mas.Sort сортирует их по возрастанию, то как сделать так, чтобы он сортировал их по убыванию
C#
1
2
mas.Sort();
mas.Reverse();
0
28.03.2011, 13:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2011, 13:41
Помогаю со студенческими работами здесь

Массив объектов класса List: Error CS0118: `list' is a `field' but a `type' was expected
Не могу понять что делаю не так, вот код: SimpleClass { } List&lt;SimpleClass&gt; list = new...

Сортировка массива с помощью потоков
Можете объяснить как сделать сортировку с помощью потоков(в университете дали такое задание). Я...

Сортировка массива с помощью дерева
Помогите сделать лабу. Сортировка массива с помощью дерева Цель выполнения заданий: освоение...

Сортировка одномерного массива..с помощью процедур
Дана числовая последовательность от 1 до 20 ,элементы стоящие на нечетных местах расположить в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru