某AI创业公司前端团队面试题,写一个函数sort,对一个只有字符的数组进行排序,比如说['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd']

    要求:

    1. 大写在前,小写在后

    2. 大小写字母之间的顺序不能改变,比如AaBbCcDd排序后应该是ABCDabcd。

    3. 不能使用额外空间。

    答案:

    本题考查对排序算法的理解和运用。由于不能更改元素本来的的位置,只有冒泡排序一种选择。

    虽然基于比较的排序,复杂度可以到O(nlgn),但是在限制空间,限制稳定性的情况下,还是O(n^2)

    1. function swap(A, i, j){
    2. [A[i],A[j]] = [A[j], A[i]]
    3. }
    4. function bubble_sort(A, compareFunc) {
    5. for(let i = A.length - 1; i >= 1; i--) {
    6. for(let j = 0; j < i; j++) {
    7. if(compareFunc(A[j], A[j+1]) > 0){
    8. swap(A, j, j + 1)
    9. }
    10. }
    11. }
    12. }
    13. function sort(A) {
    14. bubble_sort(A, (a, b) => {
    15. return (a === a.toUpperCase() ? 0 : 1)
    16. - (b === b.toUpperCase() ? 0 : 1)
    17. })
    18. }