» »

C# StrandSort

C# StrandSort

z3ro ::

Zanima me, kako bi naredil urejanje s prameni (iz polja, ki ga želimo urediti, jemljemo naraščajoče urejena zaporedja števil (pramena) ter jih združevanjem vključujemo v polje, ki predstavlja naš rezultat.) samo z uporabo polj. Spodaj v kodi imam narejeno s seznamom (List), česar pa pri nalogi ne smemo uporabljati.
static private int[] odstrani(int[] poljeindeksov, int odstraniNa)
        {
            int[] novopolje = new int[poljeindeksov.Length - 1];

            int i = 0;
            int j = 0;
            while (i < poljeindeksov.Length)
            {
                if (i != odstraniNa)
                {
                    novopolje[j] = poljeindeksov[i];
                    j++;
                }

                i++;
            }

            return novopolje;
        }

        static private int[] zdruzi(int[] A, int[] B)
        {
            var list = new List<int>();
            list.AddRange(A);
            list.AddRange(B);
            list.Sort();
            return list.ToArray();
        }

        //a predstavlja polje (celostevilskih) elementov, ki ga urejamo
        static int[] urediSPrameni(int[] a)
        {

            List<int> SubList = new List<int>();
            int[] urejenopolje = new int[] { };
            int last;
            while (a.Length > 0)
            {
                SubList.Clear();
                
                SubList.Add(a[0]);
                last = 0;

                a = odstrani(a, 0);
                for (int j = 0; j < a.Length; j++)
                {
                    if (a[j] > SubList[last])
                    {
                        SubList.Add(a[j]);
                        last++;
                        a = odstrani(a, j);
                    }
                }
                urejenopolje = zdruzi(SubList.ToArray(), urejenopolje);

            }


            return urejenopolje;
        }

epicVoid ::

A seznamov ne smete uporabljat ? Iz wikipedije : Strand sort is most useful for data which is stored in a linked list, due to the frequent insertions and removals of data. Ta pa je huda.

Spura ::

Napisi si funkcije, ki v polja dodajajo in odvzemajo podatke, pri cemer podatke od pozicije naprej najprej primerno naprej premaknejo oziroma skopirajo v nov vecji array, ce je velikost presezena. Potem lahko algoritem naredis isto kot bi imel list.

z3ro ::

epicVoid: ne, samo arraye lahko uporabljamo.
Sem probal spremenit List v array pa ne dela..

static int[] urediSPrameni(int[] a)
        {

            //List<int> SubList = new List<int>();
            int[]podpolje=new int[]{};
            int[] urejenopolje = new int[] { };
            int last;
            while (a.Length > 0)
            {
                //SubList.Clear();
                Array.Clear(podpolje, 0, podpolje.Length);
                //SubList.Add(a[0]);
                podpolje[0] = a[0]; //napaka
                last = 0;

                a = odstrani(a, 0);
                for (int j = 0; j < a.Length; j++)
                {
                    if (a[j] > podpolje[last])
                    {
                        podpolje[podpolje.Length-1]=a[j];  //dvomim da je prav
                        last++;
                        a = odstrani(a, j);
                    }
                }
                urejenopolje = zdruzi(podpolje, urejenopolje);

            }


            return urejenopolje;
        }


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java - DN] Naključna števila

Oddelek: Šola
121352 (881) nyler
»

[java] kombinacije

Oddelek: Programiranje
212813 (2288) napsy
»

Za programerske teoretike

Oddelek: Programiranje
478785 (5587) Jerry000
»

Generiranje kombinacij znakov

Oddelek: Programiranje
141308 (993) c0dehunter
»

[Java] Sortiranje objektov

Oddelek: Programiranje
192840 (2840) tjaz24

Več podobnih tem