static int LListPartition(LinkedListEmulator list, int head, int tail)
        {
            // set pivot as h element
            int pivot = list.GetNodeData(tail);

            // similar to i = l-1 for array implementation
            int i = list.GetPrevAdress(head);
            int temp;

            // Similar to "for (int j = l; j <= h- 1; j++)"
            for (int j = head; j != tail; j = list.GetNextAdress(j))
            {
                if (list.GetNodeData(j) <= pivot)
                {
                    // Similar to i++ for array
                    i    = (i == -1) ? head : list.GetNextAdress(i);
                    temp = list.GetNodeData(i);
                    list.SetNodeData(i, list.GetNodeData(j));
                    list.SetNodeData(j, temp);
                }
            }

            i    = (i == -1) ? head : list.GetNextAdress(i); // Similar to i++
            temp = list.GetNodeData(i);
            list.SetNodeData(i, list.GetNodeData(tail));
            list.SetNodeData(tail, temp);
            return(i);
        }
Beispiel #2
0
        static string TestListFile(LinkedListEmulator list)
        {
            var time = Stopwatch.StartNew();

            QuickSort_OnlyFile.Sort.LinkedListQuickSort(list, list.Head, list.Tail);
            time.Stop();
            return(time.Elapsed.Minutes + "." + time.Elapsed.Seconds + "." + time.Elapsed.Milliseconds);
        }
 public static void LinkedListQuickSort(LinkedListEmulator list, int head, int tail)
 {
     if (tail != -1 && head != tail && head != list.GetNextAdress(tail))
     {
         int temp = LListPartition(list, head, tail);
         LinkedListQuickSort(list, head, list.GetPrevAdress(temp));
         LinkedListQuickSort(list, list.GetNextAdress(temp), tail);
     }
 }
Beispiel #4
0
        static LinkedListEmulator GetRandomListFile(int length)
        {
            var list   = new LinkedListEmulator("testlist.dat");
            var random = new Random();

            for (int i = 0; i < length; i++)
            {
                list.AddLast(random.Next(int.MinValue, int.MaxValue));
            }

            return(list);
        }