2023年9月

遇到一个这样的面试问题,写一个方法可以针对数字类型进行冒泡排序。

直接手写代码开撸

void NumberSort<T>(T[] items) {  
    var temp = default(T);
    for (var i = 0; i < items.Length; i++) {
        for (var j = 0; j < items.Length && j != i; j++) {
        if (items[i] >  items[j])
            continue;  
        temp = items[i];
        items[i] = items[j];
        items[j] = temp;
        } 
    }
}

看似没毛病,结果发现没法编译,因为 items[i] 和 items[j] 没法执行比较。

F12 看一下 int、float、decimal等类型的的定义,发现他们都继承于 IComparable,顾名思义" 可比较的";

接下来修改代码

void NumberSort<T>(T[] items) Where T : IComparable {
    var temp = default(T);
    for (var i = 0; i < items.Length; i++) {
        for (var j = 0; j < items.Length && j != i; j++) {
            if (items[i].CompareTo(items[j]) > 0)
                continue;
            temp = items[i];
            items[i] = items[j];
            items[j] = temp;
        }
    }
}

完美运行