Hoi,
Ik wil graag een array (10) uit een listbox sorten d.m.v. doubly linked list, deze code word soms met succes doorlopen, maar hij kan ook crashen...? ik kom er maar niet achter waar de fout zit.
Alvast bedankt
Ik wil graag een array (10) uit een listbox sorten d.m.v. doubly linked list, deze code word soms met succes doorlopen, maar hij kan ook crashen...? ik kom er maar niet achter waar de fout zit.
Alvast bedankt
Code:
001 //Button sort
002
003 private void button1_Click(object sender, EventArgs e)
004 {
005 lbS.Items.Clear();
006 lbU.Items.Clear();
007 // n = lengte van array
008 int n = 10;
009 int[] iar = new int[n];
010 Random r = new Random();
011 for (int i = 0; i < n; i++)
012 {
013 iar[i] = r.Next(0, 20);
014 lbU.Items.Add(iar[i]);
015 }
016 iar = cDLL.mDLL(iar);
017 for (int i = 0; i < n; i++)
018 {
019 lbS.Items.Add(iar[i]);
020 }
021
022 //class cDLL
023
024 namespace
025 {
026 class cDLL
027 {
028 // v = voor (before)
029 // o = opslag (temp)
030 //nAR = node array
031 // L = linker (left)
032 // M = midden (middle)
033 // R = rechter (right)
034
035 private static cDLL v, o;
036 private static cDLL[] nAR;
037 private cDLL L;
038 private int M;
039 private cDLL R;
040
041 //constructor
042 private cDLL(cDLL pL, int v, cDLL pR)
043
044 // pL pointer left
045 // M = meeloper (v) (walker)
046 // pR pointer right
047 {
048
049 L = pL;
050 M = v;
051 R = pR;
052 }
053 public static int[] mDLL(int[] iar)
054 {
055 //iar = int array
056 //n = length of int array iar
057 int n = iar.Length;
058
059 nAR = new cDLL[n];
060 //node array [0] = new cdll null <- [0] ->null
061 nAR[0] = new cDLL(null, iar[0], null);
062
063 v = nAR[0]; o = v;
064 nAR[1] = new cDLL(null, iar[0], null);
065 if (iar[1] >= iar[0])
066 {
067 //infront
068 nAR[0].R = nAR[1];
069 nAR[1].L = nAR[0];
070 }
071 else
072 {
073 //behind
074 nAR[0].L = nAR[1];
075 nAR[1].R = nAR[0];
076 v = nAR[1];
077 }
078 for (int i = 2; i < n; i++)
079 {
080 nAR[i] = new cDLL(null, iar[i], null);
081 o = v;
082 while (nAR[i].M > o.M)
083 {
084 if (o.R != null)
085 {
086 o = o.R;
087 }
088 else
089 {
090 nAR[i].L = o;
091 o.R = nAR[i];
092 break;
093 }
094 }
095
096 if (v == o)
097 {
098 o.L = nAR[i];
099 nAR[i].R = o;
100 v = nAR[i];
101 }
102 else
103 {
104 o.L.R = nAR[i];
105 nAR[i].L = o.L;
106 o.L = nAR[i];
107 nAR[i].R = o;
108 }
109
110 }
111
112 for (int i = 0; i < iar.Length; i++)
113 {
114 iar[i] = v.M;
115 v = v.R;
116 }
117 return iar;
118 }
119 }
120 }
Laatst bewerkt: