Поиск по этому блогу

Показаны сообщения с ярлыком Сортировка. Показать все сообщения
Показаны сообщения с ярлыком Сортировка. Показать все сообщения

воскресенье, 20 мая 2012 г.

Перемешивание списка

Иногда бывает нужно перемешать(отсортировать) определённый список или массив данных в случайном порядке.
Вот один вариант решения данной задачи:

    class Randoming
    {
        public static void MixList<t>(IList<t> list) 
        {
            Random r = new Random();
            //Создаем сортируемый список и набиваем в него значения из 
            //целевого списка. Тип SortedList устроен так, что при добавлении 
            //нового элемента, он (элемент) помещается не в конец списка 
            //элементов, а между ними, обеспечивая моментальную автоматическую 
            //сортировку списка
            SortedList<int, t> mixedList = new SortedList<int, t>();
            //заполняем список
            foreach (t item in list)
                mixedList.Add(r.Next(), item);

            list.Clear();
            for (int i = 0; i < mixedList.Count; i++)
            {
                list.Add(mixedList.Values[i]);
            }  
        }
    }
        
static void Main(string[] args)
        {
            Console.WriteLine("Сейчас будет рандомная сортировка");
            List<string> myList = new List<string>();
            //List<string> result = new List<string>();
            for (int i = 0; i < 50; i++)
                myList.Add(i.ToString());
            Randoming.MixList(myList);
            foreach(var ml in myList)
            {
                //result.Add(ml);
                Console.WriteLine(ml);
            }
            //Console.WriteLine(result);
            Console.ReadLine();
        }

пятница, 18 мая 2012 г.

Быстрая сортировка

Решил уделить больше внимание различным сортировкам на C#. Первая, которую решил осуществить  -  Quick Sort (Быстрая сортировка). Один из быстрых известных универсальных алгоритмов сортировки массивов. Суть алгоритма:
  • из массива выбирается элемент. Как правило, в качестве этого элемента берется центральный элемент массива. 
  • остальные элементы распределяются таким образом, чтобы слева  оказались все элементы, меньшие или равные опорному элементу. Элементы, большие или равные опорному элементу, помещаются справа. 

среда, 25 апреля 2012 г.

Сортировка символов в строке

Нашёл пример, как рассортировать строку так, чтобы сначала шли большие буквы, а за ними маленькие.

string s = "aSdFgHjKlOiUyYT";
        s = string.Concat(s.OrderBy(Char.IsLower));
        Console.WriteLine(s);

воскресенье, 8 апреля 2012 г.

Пузырьковая сортировка

Приведенная ниже программа демонстрирует, как использовать возможность
манипуляции элементами массива для их сортировки. В программе
применен алгоритм пузырьковой сортировки.
Писал по книжке)

namespace BubbleSort
{
    class Program
    {
        public static void OutputStudentArray(Student[] students) 
        {
            foreach(Student s in students)
            {
                Console.WriteLine(s.GetString());
            }
        }
        static void Main(string[] args)
        {
            Student[] students = new Student[5];
            students[0] = Student.NewStudent("Homer", 0);
            students[1] = Student.NewStudent("Lisa", 4.0);
            students[2] = Student.NewStudent("Bart", 2.0);
            students[3] = Student.NewStudent("Marge", 3.0);
            students[4] = Student.NewStudent("Maggie", 3.5);
            Console.WriteLine("До сортировки");
            OutputStudentArray(students);
            Console.WriteLine("Сортировка");
            Student.Sort(students);
            Console.WriteLine("Вывод отсортированного списка");
            OutputStudentArray(students);
            Console.WriteLine("Нажмите <Enter>");
            Console.ReadLine();
        }
    }
}
namespace BubbleSort
{
    class Student
    {
        public string sName;
        public double dGrade = 0.0;
        public static Student NewStudent(string sName, double dGrade) 
        {
            Student student = new Student();
            student.sName = sName;
            student.dGrade = dGrade;
            return student;
        }
        public string GetString() 
        {
            string s = "";
            s += dGrade;
            s += " - ";
            s += sName;
            return s;
        }
        public static void Sort(Student[] students) 
        {
            bool bRepeatLoop;
            do
            {
                bRepeatLoop = false;
                for (int index = 0; index < (students.Length - 1); index++)
                {
                    if (students[index].dGrade < students[index + 1].dGrade)
                    {
                        Student to = students[index];
                        Student from = students[index + 1];
                        students[index] = from;
                        students[index + 1] = to;
                        bRepeatLoop = true;
                    }
                }
            } while (bRepeatLoop);
        }
    }
}