Sortowanie listy jednokierunkowej

0

Cześć,
mam problem, z którym nie mogę sobie poradzić. Mianowicie muszę posortować listę jednokierunkową Kolejka przez funkcje void Sortuj() (bez parametrów) wg malejącej doZapłaty. Pomoże ktoś? ja już nie mam nerw do to tej funkcji. Zaznaczam, że metoda Sortuj(), ma też posortować scaloną listę z dwóch innych w metodzie Złącz(... , ...) Poniżej wrzucam kod.

 public enum TypPłatności { Gotówka, Karta, BonTowarowy };

    public class Klient
    {
        string nazwisko;
        int liczbaProduktów;
        TypPłatności typPłatności;
        double doZapłaty;

        public Klient(string nazwisko, int lP, TypPłatności tP, double doz)
        {
            this.nazwisko = nazwisko;
            liczbaProduktów = lP;
            typPłatności = tP;
            doZapłaty = doz;
        }

        public string ZwrocDane()
        {
            return nazwisko + " " + liczbaProduktów + " " + typPłatności + " " + doZapłaty;
        }

        public string ZwrocNazwisko()
        {
            return nazwisko;
        }

        public double ZwrocdoZaplaty()
        {
            return doZapłaty;
        }

    }

    public class Kolejka
    {

        public class Węzeł
        {
            public Klient klient;
            public Węzeł następny;
        }

        public Węzeł głowa;
        public Węzeł ogon;

        public bool CzyPusta()
        {
            return głowa == null;
        }

        public void DodajDoGłowy(Klient k)
        {
            Węzeł tmp = new Węzeł();
            tmp.klient = k;
            tmp.następny = głowa;
            głowa = tmp;
            if (ogon == null)
                ogon = tmp;
        }

        public void DodajDoOgona(Klient k)
        {
            Węzeł tmp = new Węzeł();
            tmp.klient = k;
            if (ogon == null)
            {
                ogon = głowa = tmp;
            }
            else
            {
                ogon.następny = tmp;
                ogon = tmp;
            }
        }

        public int ZwróćRozmiarItr()
        {
            int r = 0;
            for (Węzeł w = głowa; w != null; w = w.następny)
            {
                r++;
            }
            return r;
        }

        public void Wyświetl()
        {
            if (CzyPusta())
            {
                Console.WriteLine("Kolejka jest pusta"); return;
            }
            Węzeł w = głowa;
            while (w != null)
            {
                Console.WriteLine(w.klient.ZwrocDane());
                w = w.następny;
            }
            Console.WriteLine();
        }

        public void UsuńZGłowy()
        {
            if (CzyPusta())
            {
                Console.WriteLine("Kolejka jest pusta, nie można obsłużyć klienta."); return;
            }
            Console.WriteLine("Klient został obsłużony: " + głowa.klient.ZwrocDane());
            if (ogon == głowa)
            {
                głowa = ogon = null; return;
            }
            głowa = głowa.następny;

        }

        public void UsuńZOgona()
        {
            if (CzyPusta())
            {
                Console.WriteLine("Kolejka pusta."); return;
            }
            Console.WriteLine("Klient zrezygnował: "+ ogon.klient.ZwrocDane());
            if (głowa == ogon)
            {
                głowa = ogon = null; return;
            }
            Węzeł w = głowa;
            while (w.następny != ogon)
            {
                w = w.następny;
            }
            ogon = w;
            ogon.następny = null;
        }       

        public void Sortuj()
        {
            
        }

        public Kolejka Złącz(Kolejka k1, Kolejka k2) //OK
        {
            Kolejka k = new Kolejka();
            for (Węzeł w = k1.głowa; w != null; w = w.następny)
            {
                k.DodajDoGłowy(w.klient);
            }
            for (Węzeł w1 = k2.głowa; w1 != null; w1 = w1.następny)
            {
                k.DodajDoGłowy(w1.klient);
            }
            //k.Sortuj();
            return k;
        }
    }
0

MergeSort - przepisanie funkcji rekurencyjnej na postać iteracyjną
Tu masz jak napisać procedurę scalającą a także listę kroków dla procedury dzielącej

Funkcja złącz którą musisz napisać jest jedną z funkcji używanych przez sortowanie przez scalanie
Może przydać się też odwracanie kolejności elementów na liście gdyby była potrzeba sortowania w obydwu kierunkach

1 użytkowników online, w tym zalogowanych: 0, gości: 1