Forum » Programiranje » 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..
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 ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | [Java - DN] Naključna številaOddelek: Šola | 1536 (1065) | nyler |
| » | [java] kombinacijeOddelek: Programiranje | 3361 (2836) | napsy |
| » | Za programerske teoretikeOddelek: Programiranje | 9283 (6085) | Jerry000 |
| » | Generiranje kombinacij znakovOddelek: Programiranje | 1454 (1139) | c0dehunter |
| » | [Java] Sortiranje objektovOddelek: Programiranje | 3113 (3113) | tjaz24 |