ВУЗ:
Составители:
Рубрика:
21
Определим обобщенный метод быстрой сортировки, указав
ограничение на использование в качестве обобщенных типов только тех,
которые раскрывают интерфейс IComparable. Пусть этот метод является
статическим для главного класса приложения Program.
class Program
{
static void QuickSort<T>(T [] m, int l, int r)
where T: IComparable
{
if(l == r)
return;
int i = l, j = r;
// выбирается элемент, делящий массив на две части
T selected = m[l];
// осуществляется поиск и перестановка элементов, меньших
// выбранного, с конца массива и больших выбранного
// с начала массива.
while(i != j)
{
while(m[j].CompareTo(selected) >= 0 && j > i)
j--;
if(j > i)
{
m[i] = m[j];
while(m[i].CompareTo(selected) <= 0 && i < j)
i++;
m[j] = m[i];
}
}
// выбранный элемент устанавливается на надлежащее место
m[i] = selected;
// если существуют элементы слева от выбранного,
// сортируем эту часть массива
if(l <= i-1)
QuickSort(m, l, i-1);
// то же проводится с правой частью массива,
// если она существует
if( i+1 < r)
QuickSort(m , i+1, r);
}
static void Main(string[] args)
{
Fraction[] a = { new Fraction(4,2,3,1),
new Fraction(1,6,5,-1),
new Fraction(0,2,7,1),
new Fraction(10,2,3,-1),
new Fraction(2,13,20,1),
Определим обобщенный метод быстрой сортировки, указав ограничение на использование в качестве обобщенных типов только тех, которые раскрывают интерфейс IComparable. Пусть этот метод является статическим для главного класса приложения Program. class Program { static void QuickSort(T [] m, int l, int r) where T: IComparable { if(l == r) return; int i = l, j = r; // выбирается элемент, делящий массив на две части T selected = m[l]; // осуществляется поиск и перестановка элементов, меньших // выбранного, с конца массива и больших выбранного // с начала массива. while(i != j) { while(m[j].CompareTo(selected) >= 0 && j > i) j--; if(j > i) { m[i] = m[j]; while(m[i].CompareTo(selected) <= 0 && i < j) i++; m[j] = m[i]; } } // выбранный элемент устанавливается на надлежащее место m[i] = selected; // если существуют элементы слева от выбранного, // сортируем эту часть массива if(l <= i-1) QuickSort(m, l, i-1); // то же проводится с правой частью массива, // если она существует if( i+1 < r) QuickSort(m , i+1, r); } static void Main(string[] args) { Fraction[] a = { new Fraction(4,2,3,1), new Fraction(1,6,5,-1), new Fraction(0,2,7,1), new Fraction(10,2,3,-1), new Fraction(2,13,20,1), 21
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »