private void InsertSort() { for (int i = 1; i < arr.Count; i++) { int j = i; Part temp = new Part(arr[i]); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, 0, 2, false)); while (j > 0) { if (temp.num < arr[j - 1].num) { DemoQueue.Enqueue(new Movement(activityType.MOVE, temp.index, -1, 0, true));; DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j - 1].index, 1, 0, false)); arr[j].Assign(arr[j - 1]); } else { break; } j--; } DemoQueue.Enqueue(new Movement(activityType.MOVE, temp.index, 0, -2, false)); arr[j].Assign(temp); } }
private void BubbleSort() { for (int i = 0; i < arr.Count; i++) { for (int j = 0; j < arr.Count - i - 1; j++) { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 0, 2, true));; DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j + 1].index, 0, 2, false));; if (arr[j].num > arr[j + 1].num) { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 1, 0, true)); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j + 1].index, -1, 0, false)); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 0, -2, true)); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j + 1].index, 0, -2, false)); arr[j].Swap(arr[j + 1]); } else { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 0, -2, true));; DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j + 1].index, 0, -2, false)); } } DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[arr.Count - i - 1].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["successed"], false, false)); } }
private static void Main() { #region Array Console.WriteLine("Пример работы с массивом:"); var testArray = new DemoArray(); testArray.RunTestArray(); Ending("Array"); #endregion #region ArrayList Console.WriteLine("Пример работы с ArrayList:"); var testArrayList = new DemoArrayList(); testArrayList.RunTestArrayList(); Ending("ArrayList"); #endregion #region Stack Console.WriteLine("Пример работы со Stack:"); var testStack = new DemoStack(); testStack.RunTestStack(); Ending("Stack"); #endregion #region Queue Console.WriteLine("Пример работы с очередью:"); var testQueue = new DemoQueue(); testQueue.RunTestQueue(); Ending("Queue"); #endregion #region Dictionary Console.WriteLine("Пример работы со словарем:"); var testDict = new DemoDictionary(); testDict.RunTestDictionary(); Ending("Dictionary"); #endregion #region HashTable Console.WriteLine("Пример работы с хеш-таблицей:"); var testHash = new DemoHashTable(); testHash.RunTestHashTable(); Ending("HashTable"); #endregion #region LinkedList Console.WriteLine("Пример работы с LinkedList:"); var testLinkedList = new DemoLinkedList(); testLinkedList.RunTestLinkedList(); Ending("LinkedList");
private void merge(int left, int right) { int mid = (left + right) / 2; for (int tt = left; tt <= right; tt++) { bool flag = false; if (tt != right) { flag = true; } DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[tt].index, 0, 2, flag)); } int i = left, j = mid + 1, k = left; while (i <= mid && j <= right) { if (arr[i].num <= arr[j].num) { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, -(i - k), -2, false)); temp[k++].Assign(arr[i++]); } else { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, -(j - k), -2, false));; temp[k++].Assign(arr[j++]); } } while (i <= mid) { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, -(i - k), -2, false)); temp[k++].Assign(arr[i++]); } while (j <= right) { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, -(j - k), -2, false));; temp[k++].Assign(arr[j++]); } while (left <= right) { arr[left].Assign(temp[left++]); } }
private void SelectSort() { for (int i = 0; i < arr.Count; i++) { int minIndex = i; DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["successed"], false, true)); for (int j = i + 1; j < arr.Count; j++) { DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["selected"], true, true)); if (arr[j].num < arr[minIndex].num) { DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["successed"], false, true)); DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[minIndex].index, MainControl.ColorSetting["successed"], MainControl.ColorSetting["normal"], false, true)); minIndex = j; } } Log T = MyTools.GetQueueTail(DemoQueue); T.hasNext = false; DemoQueue.Enqueue(T); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[minIndex].index, -(minIndex - i), 0, true)); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, minIndex - i, 0, false)); arr[i].Swap(arr[minIndex]); } }
private void ShellSort() { int len = arr.Count; for (int div = len / 2; div >= 1; div = div / 2) { for (int i = 0; i < div; ++i) { int j; for (j = i; j < len; j += div) { DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["selected"], false, true)); } Log T = MyTools.GetQueueTail(DemoQueue); T.hasNext = false; DemoQueue.Enqueue(T); for (j = i + div; j < len; j += div) { int k; Part temp = new Part(arr[j]); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, 0, 2, false)); for (k = j - div; k >= 0 && temp.num < arr[k].num; k -= div) { DemoQueue.Enqueue(new Movement(activityType.MOVE, temp.index, -div, 0, true)); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[k].index, div, 0, false)); arr[k + div].Assign(arr[k]); } DemoQueue.Enqueue(new Movement(activityType.MOVE, temp.index, 0, -2, false)); arr[k + div].Assign(temp); } for (j = i; j < len; j += div) { DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["selected"], MainControl.ColorSetting["normal"], false, true)); } T = MyTools.GetQueueTail(DemoQueue); T.hasNext = false; DemoQueue.Enqueue(T); } } }
private void QuickSort(int left, int right) { if (left == right) { DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[left].index, MainControl.ColorSetting["normal"] , MainControl.ColorSetting["successed"], false, false)); return; } if (left <= right) { int temp = UnityEngine.Random.Range(left, right + 1); DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[temp].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["successed"], false, false)); if (temp != left) { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[temp].index, -(temp - left), 0, true)); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[left].index, temp - left, 0, false)); arr[temp].Swap(arr[left]); } int x = arr[left].num; int i = left, j = right; while (i < j) { while (i < j && arr[j].num >= x) { DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["selected"], true, true)); j--; } if (i < j) { DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["signed"], false, false)); } while (i < j && arr[i].num <= x) { DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, i == left ? MainControl.ColorSetting["successed"] : MainControl.ColorSetting["normal"], MainControl.ColorSetting["selected"], true, true)); i++; } bool flag = true; if (i < j) { flag = false; DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, MainControl.ColorSetting["normal"], MainControl.ColorSetting["signed"], false, false)); } if (flag) { Log T = MyTools.GetQueueTail(DemoQueue); T.hasNext = false; DemoQueue.Enqueue(T); } if (i < j) { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, j - i, 0, true)); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[j].index, -(j - i), 0, true)); DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, MainControl.ColorSetting["signed"], MainControl.ColorSetting["normal"], false, true)); DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[j].index, MainControl.ColorSetting["signed"], MainControl.ColorSetting["normal"], false, false)); arr[i].Swap(arr[j]); } } if (i != left) { DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[i].index, -(i - left), 0, true)); DemoQueue.Enqueue(new Movement(activityType.MOVE, arr[left].index, i - left, 0, true)); DemoQueue.Enqueue(new TurnColor(activityType.TURNCOLOR, arr[i].index, MainControl.ColorSetting["signed"], MainControl.ColorSetting["normal"], false, false)); arr[left].Swap(arr[i]); } QuickSort(left, i - 1); QuickSort(i + 1, right); } }
public QueueController(DemoQueue queue) { _queue = queue; }