ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »
