public int Sort(ref mergeExample[] sortArray, int start, int end) { int sortPointValue = sortArray[start].id; int sortPoint = start; int leftIndex = start; int rightIndex = end; while (leftIndex < rightIndex && sortArray[leftIndex].id > sortPointValue) { leftIndex++; } while (rightIndex > leftIndex && sortArray[rightIndex].id > sortPointValue) { rightIndex--; } mergeExample temp = sortArray[sortPoint]; Debug.Log("leftIndex" + leftIndex + " right" + rightIndex); if (sortArray[leftIndex].id < sortArray[rightIndex].id) { sortArray[sortPoint] = sortArray[leftIndex]; sortArray[leftIndex] = temp; sortPoint = leftIndex; } else { sortArray[sortPoint] = sortArray[rightIndex]; sortArray[rightIndex] = temp; sortPoint = rightIndex; } return(sortPoint); }
public mergeExample[] Merge(mergeExample[] array1, mergeExample[] array2) { mergeExample[] newArray = new mergeExample[array1.Length + array2.Length]; if (Compare(array1[0], array2[0])) { array1.CopyTo(newArray, 0); array2.CopyTo(newArray, array1.Length); } else { array2.CopyTo(newArray, 0); array1.CopyTo(newArray, array2.Length); } return(newArray); }
public mergeExample[] MergeSort(mergeExample[] sortArray, int start, int end) { if (start < end) { Debug.Log("start:" + start + " End:" + end); int middle = start + (int)Mathf.Floor((end - start) / 2); mergeExample[] array1 = MergeSort(sortArray, start, middle); mergeExample[] array2 = MergeSort(sortArray, middle + 1, end); return(Merge3(array1, array2)); } else { mergeExample[] newArray = new mergeExample[1]; newArray[0] = sortArray[start]; return(newArray); } }
//doing a buble sort this time public mergeExample[] bubbleSort(mergeExample[] sortArray) { mergeExample[] newArray = new mergeExample[sortArray.Length]; int lowestIndex = 0; for (int i = 0; i < sortArray.Length; i++) { lowestIndex = i; for (int j = i + 1; j < sortArray.Length; j++) { if (sortArray[lowestIndex].name.CompareTo(sortArray[j].name) > 0) { lowestIndex = j; } } mergeExample temp = sortArray[i]; sortArray[i] = sortArray[lowestIndex]; sortArray[lowestIndex] = temp; } return(sortArray); }
public mergeExample[] Merge2(mergeExample[] sortArray, int start, int mid, int end) { mergeExample[] newArray = new mergeExample[end - start + 1]; //int subArray1Length = mid - start; //int subArray2Length = end - mid; int firstIndex = start; int secondIndex = mid + 1; int newArrayIndex = 0; while (firstIndex <= mid && secondIndex <= end) { if (Compare(sortArray[firstIndex], sortArray[secondIndex])) { newArray[newArrayIndex] = sortArray[firstIndex]; firstIndex++; } else { newArray[newArrayIndex] = sortArray[secondIndex]; secondIndex++; } newArrayIndex++; } while (firstIndex <= mid) { newArray[newArrayIndex] = sortArray[firstIndex]; firstIndex++; newArrayIndex++; } while (secondIndex <= end) { newArray[newArrayIndex] = sortArray[secondIndex]; secondIndex++; newArrayIndex++; } return(newArray); }
public mergeExample[] Merge3(mergeExample[] array1, mergeExample[] array2) { mergeExample[] newArray = new mergeExample[array1.Length + array2.Length]; int firstIndex = 0; int secondIndex = 0; int newArrayIndex = 0; while (firstIndex < array1.Length && secondIndex < array2.Length) { if (Compare(array1[firstIndex], array2[secondIndex])) { newArray[newArrayIndex] = array1[firstIndex]; firstIndex++; } else { newArray[newArrayIndex] = array2[secondIndex]; secondIndex++; } newArrayIndex++; } while (firstIndex < array1.Length) { newArray[newArrayIndex] = array1[firstIndex]; firstIndex++; newArrayIndex++; } while (secondIndex < array2.Length) { newArray[newArrayIndex] = array2[secondIndex]; secondIndex++; newArrayIndex++; } return(newArray); }
public bool Compare(mergeExample a, mergeExample b)//if a has higher or equal priority then b return true else false { return(a.id <= b.id); }