Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
shtoporrock
1 / 1 / 0
Регистрация: 08.12.2012
Сообщений: 12
#1

Сортировка списка - C#

13.06.2013, 20:51. Просмотров 443. Ответов 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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    struct stud
    {
        public string famile;
        public int year;
        public int month;
        public int day;
        public stud(string famile1, int year1, int month1, int day1)
        {
            famile = famile1;
            year = year1;
            month = month1;
            day = day1;
        }
    }
                      
    class Program
    {
        static void shell(stud[] sp)
        {
            //сортировка методом Шелла
            int step = sp.Length / 2; //определяем шаг
            while (step > 0) //до тех пока, пока шаг не стал < 1 
            {
                for (int i = 0; i < (sp.Length - step); i++)
                {
                    int j = i; //начинаем цикл с i-го элемента
                    while (j >= 0 && sp[j].month > sp[j + step].month)
                    /* пока не будем находиться в начале массива
                     * и пока рассматриваемый элемент больше
                     * элемента, находящегося на расстоянии q
                     */
                    {
                        //меняем местами эти элементы
                        stud temp = sp[j];
                        sp[j] = sp[j + step];
                        sp[j + step] = temp;
                        j--;
                    }
                }
                step = step / 2; //уменьшаем шаг
            }
        }
 
        static void sort(stud[] arr, int range, int steps)
        {
            //цифровая по году
            ArrayList[] lists = new ArrayList[range];
            for (int i = 0; i < range; i++) //выделяем память для списков
            {
                lists[i] = new ArrayList();
            }
            for (int step = 0; step < steps; step++) //начинаем сортировать
            {
                for (int i = 0; i < arr.Length; i++) //распределяем элементы по спискам
                {
                    int temp = (arr[i].year % (int)Math.Pow(range, step + 1)) / (int)Math.Pow(range, step);
                    lists[temp].Add(arr[i]);
                }
                int k = 0;
                for (int i = 0; i < range; i++) //кладем элементы из списков обратно в массив
                    for (int j = 0; j < lists[i].Count; j++)
                    {
                        arr[k++] = (stud)lists[i][j];
                    }
                for (int i = 0; i < range; i++)
                lists[i].Clear(); //очищаем списки
            }            
        }
 
        static void Main(string[] args)
        {
            int[] b = new int[10];
            stud[] sp = new stud[10];
            sp[0] = new stud("Иванов", 1994, 1, 30);
            sp[1] = new stud("Петров", 1993, 2, 21);
            sp[2] = new stud("Сидоров", 1991, 5, 23);
            sp[3] = new stud("Кузнецов", 1994, 3, 19);
            sp[4] = new stud("Макаров", 1992, 6, 28);
            sp[5] = new stud("Лобанов", 1994, 12, 11);
            sp[6] = new stud("Быков", 1993, 9, 7);
            sp[7] = new stud("Зотов", 1993, 10, 8);
            sp[8] = new stud("Матвеев", 1993, 11, 2);
            sp[9] = new stud("Зорин", 1991, 12, 17);
            Console.WriteLine("Список студентов");
            for (int i = 0; i < sp.Length; i++)
            {
                Console.WriteLine("Фамилия  {0}  \t    Дата рождения {1:d1}.{2:d2}.{3:d1}", sp[i].famile, sp[i].year, sp[i].month, sp[i].day);
            }
            Console.WriteLine();
            //цифровая(поразрядная) сортировка
            sort(sp, 4, 10); //вызов функции сортировки          
           
            Console.WriteLine("\nОтсортированный список студентов цифровой сортировкой и методом Шелла:");
            for (int i = 0; i < sp.Length; i++)
            {
                Console.WriteLine("Фамилия  {0}  \t    Дата рождения {1:d1}.{2:d2}.{3:d1}", sp[i].famile, sp[i].year, sp[i].month, sp[i].day);
            }
            Console.ReadKey();
        }
    }
}

http://www.cyberforum.ru/csharp-beginners/thread1769979.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 20:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка списка (C#):

Сортировка списка, главная сортировка по второму числу, второстепенная по первому числу
CardList.Sort(new Comparison&lt;int&gt;((arg1, arg2) =&gt; { return (arg1 %...

Сортировка списка
Помогите пожалуйста, не работает сортировка. Текст ошибки: &quot;сбой при сравнении...

Сортировка списка
Решать задачу следующим образом. Сначала создать структуру Dictionary&lt;string,...

Сортировка списка
Имеется класс Contact public class Contact { public string...

Сортировка списка List<T>
В общем, при реализации решила не организовывать массив структур, а вместо...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 20:51
Привет! Вот еще темы с решениями:

Сортировка списка list
Здравствуйте, знатоки ! Нашел код приведенный ниже на msdn, свою задачу он...

Sort: сортировка списка
После выполнения действий нужно отсортировать лист по возрастанию и вывести в...

Сортировка списка по иерархии
Здравствуйте! Хотелось бы узнать, как создать &quot;жесткую&quot; сортировку в списке? у...

Сортировка двусвязного списка
Имеется список двусвязный кольцевой: class List { class Entry {...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru