我有两个类似的实现(java和c ++)用于像选择排序这样的简单算法.
public interface SortingAlgorithm {
public void sort(int[] a);
}
public class SelectionSort implements SortingAlgorithm {
@Override
public void sort(int[] a) {
for (int i = 0; i < a.length; i++) {
int lowerElementIndex = i;
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[lowerElementIndex]) {
lowerElementIndex = j;
}
}
swap(a, lowerElementIndex, i);
}
}
private void swap(int[] a, int i, int j) {
if (i == j) {
return;
} …Run Code Online (Sandbox Code Playgroud) 采取这段代码:
using System;
public class Program
{
interface IVisitable<T> {
void Accept(object o);
}
interface IVisitor<in T> {
void Visit(T t);
}
class IntAndDoubleVisitable: IVisitable<int>, IVisitable<double>
{
public void Accept(object o) {
if (o is IVisitor<IntAndDoubleVisitable>) {
((IVisitor<IntAndDoubleVisitable>)o).Visit(this);
}
}
}
class SingleVisitor<T>: IVisitor<T> {
public void Visit(T visitor) {
Console.WriteLine(typeof(T).FullName);
}
}
class DoubleVisitor1: IVisitor<IVisitable<int>>, IVisitor<IVisitable<double>> {
void IVisitor<IVisitable<int>>.Visit(IVisitable<int> t) {
Console.WriteLine("Int");
}
void IVisitor<IVisitable<double>>.Visit(IVisitable<double> t) {
Console.WriteLine("Double");
}
}
class DoubleVisitor2: IVisitor<IVisitable<double>>, IVisitor<IVisitable<int>> {
void IVisitor<IVisitable<int>>.Visit(IVisitable<int> t) { …Run Code Online (Sandbox Code Playgroud)