Я хочу спросить о родовом классе сортировки, который я создал. Я использовал много разных концепций, которые я выучил в этом году, и объединил его в хороший класс, который я могу использовать для сортировки чего угодно (при условии, что если это класс, у класса есть метод CompareTo)
public class Sort<T> where T : IComparable<T>
{
private List<T> toSort;
public Sort(List<T> sortList)
{
toSort = sortList;
quickSort();
}
public void quickSort()
{
qSort(toSort, 0, toSort.Count - 1);
}
private void qSort(List<T> toSort, int left, int right)
{
//set the indexes
int leftIndex = left;
int rightIndex = right;
//get the pivot
var pivot = toSort[left + (right - left) / 2];
while (leftIndex <= rightIndex)
{
//check left values
while (toSort[leftIndex].CompareTo(pivot)<0)
{
leftIndex++;
}
//check right values
while (toSort[rightIndex].CompareTo(pivot) >0)
{
rightIndex--;
}
//swap
if (leftIndex <= rightIndex)
{
var tmp = toSort[leftIndex];
toSort[leftIndex] = toSort[rightIndex];
toSort[rightIndex] = tmp;
//move towards pivot
leftIndex++;
rightIndex--;
}
}
//continues to sort left and right of pivot
if (left < rightIndex)
{
qSort(toSort, left, rightIndex);
}
if (leftIndex < right)
{
qSort(toSort, leftIndex, right);
}
}
}
У меня только один вопрос: я использовал быструю сортировку в Интернете, а затем преобразовал ее в собственные шаблоны. Я понимаю, как работает настоящая сортировка. Я просто хочу знать, почему я не должен что-то возвращать. Я немного смущен. Я вижу, что это на самом деле переключение значений списков, но мне интересно, как он получает доступ к списку, который я отправил. Потому что там, где я это называю, я могу просто сделать это
List<string> toSort = new List<string> { "C", "B", "A" };
Sort<string> sort = new Sort<string>(toSort);
cbxAlphabet.DataSource = toSort;
Так что я просто использую оригинальный список, и он будет иметь A, B и C в поле со списком.
Если кто-нибудь может объяснить это, я был бы очень признателен!
EDIT:
public static class Sort<T> where T : IComparable<T>
{
public static void quickSort(List<T> sortList)
{
qSort(sortList, 0, sortList.Count - 1);
}
private static void qSort(List<T> toSort, int left, int right)
{
//set the indexes
int leftIndex = left;
int rightIndex = right;
//get the pivot
var pivot = toSort[left + (right - left) / 2];
while (leftIndex <= rightIndex)
{
//check left values
while (toSort[leftIndex].CompareTo(pivot)<0)
{
leftIndex++;
}
//check right values
while (toSort[rightIndex].CompareTo(pivot) >0)
{
rightIndex--;
}
//swap
if (leftIndex <= rightIndex)
{
var tmp = toSort[leftIndex];
toSort[leftIndex] = toSort[rightIndex];
toSort[rightIndex] = tmp;
//move towards pivot
leftIndex++;
rightIndex--;
}
}
//continues to sort left and right of pivot
if (left < rightIndex)
{
qSort(toSort, left, rightIndex);
}
if (leftIndex < right)
{
qSort(toSort, leftIndex, right);
}
}
}