Сортировка по заданому значению - C#

Узнай цену своей работы

Формулировка задачи:

Дан одномерный список элементов, выбрать в нем любой элемент (обозначим его b) и заполнить другой список так, чтобы сначала шли все элементы меньшие b, затем равные b, затем большие b. Как работают списки обьяснять не нужно. Я не могу придумать алгоритм по которому реализовать сортировку. Помогите пожалуйста, проведите примеры(только на основе простого одномерного массива чтоб легче было понять, а к спискам я это уже сам применю, надеюсь) спасибо.
  
class MClass
    {
        int[] arr;
        int[] SortArr;
        int nElems;
        int Size;
        public MClass(int i)
        {
            arr = new int[i];
        }
 
        public void Insert(int i)
        {
            arr[nElems] = i;
            nElems++;
        }
 
        public void Sort(int i) //это метод для сортировки
        {
 
        }
        public void Print()
        {
            for (int i=0;i<Size;i++)
            {
                Console.WriteLine();
            }
        }
}

Решение задачи: «Сортировка по заданому значению»

textual
Листинг программы
  class LinkList
    {
        Link first;
        NewLink NewFirst;
        NewLink NewLast;
        public void Insert(int j)
        {
            Link newLink = new Link();
            newLink.IData = j;
            newLink.next = first;
            first = newLink;
        }
        public void Print()
        {
            Link current = first;
            while (current!=null)
            {
                current.Print();
                current = current.next;
            }
        }
        public bool isEmpty()
        {
            return NewFirst==null;
        }
        public void SortByKey(int key)
        {
            Link current = first;
            
            while (current!=null)
            {
                if (key>current.IData)
                {
                    NewLink NL = new NewLink();
                    NL.IData = current.IData;
                    if (isEmpty())
                    {
                        NewLast = NL;
                    }
                    else
                    {
                        NewFirst.previous = NL;
                    }
                   
                    NL.next = NewFirst;
                    NewFirst = NL;
                }
 
                if  (key < current.IData)
                {
                    NewLink NL = new NewLink();
                    NL.IData = current.IData;
                    if (isEmpty())
                    {
                        NewFirst = NL;
                    }
                    else
                    {
                        NewLast.next = NL;
                        NL.previous = NewLast;
                    }
                    NewLast = NL;
 
                }  
                current = current.next;
            }
 
            Link curr = first;
            while (curr.next != null)
            {
 
              if (key == curr.IData )
                {
                    insert(key);
 
                }
                curr = curr.next;
            }
 
        }
 
        public void insert(int key)        
        {
            NewLink newLink = new NewLink();
            newLink.IData = key;
            NewLink previous = null;           
            NewLink current = NewFirst;
            while (current != null && key>current.IData )
            {                            
                previous = current;
                current = current.next;       
            }
            if (previous == null)             
                NewFirst = newLink;             
            else                           
                previous.next = newLink;     
            newLink.next = current;         
        }
 
     
        public void PrintSort()
        {
            NewLink current = NewFirst;
            while (current!=null)
            {
                current.Print();
                current = current.next;
            }
        }
 
    }
 
 
 
class Program
    {
        static void Main(string[] args)
        {
            LinkList LL = new LinkList();
            LL.Insert(12);
            LL.Insert(4);
            LL.Insert(25);
            LL.Insert(54);
            LL.Insert(10);
            LL.Insert(88);
            LL.Insert(0);
            LL.Insert(54);
            LL.Insert(333);
            LL.Insert(25);
            LL.Insert(4);
            LL.Insert(54);
            LL.Insert(101);
            LL.Insert(29);
            LL.Insert(25);
            LL.Insert(54);
            LL.SortByKey(54);
            LL.PrintSort();
            Console.ReadKey();
 
        }
    }
 
 
 
 
    class NewLink
    {
        public int IData;
        public NewLink next;
        public NewLink previous;
        public void Print()
        {
        Console.Write("{0},", IData);
        }
 
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы