iOS 算法面试题(字符串逆序输出、二叉树、归并排序)~demo

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄


一、字符串逆序输出

1、实现一个字符串“how are you”的逆序输出(编程语言不限)。如给定字符串为“hello world”,输出结果应当为“world hello”


    [cpp] view plain copy

    int spliterFunc(char *p) {

        char c[100][100];

        int i =0;

        int j =0;

        

        while (*p !='\0') {

            if (*p ==' ') {

                i++;

                j = 0;

            } else {

                c[i][j] = *p;

                j++;

            }

            p++;

        }

        

        for (int k = i; k >=0; k--) {

            printf("%s", c[k]);

            if (k >0) {

                printf(" ");

            } else {

                printf("\n");

            }

        }    return0;

    }


二、二叉树


/**

    二叉树的先序遍历为FBACDEGH,中序遍历为:ABDCEFGH,请写出这个二叉树的后序遍历结果。

    

    ADECBHGF

    先序+中序遍历还原二叉树:先序遍历是:ABDEGCFH中序遍历是:DBGEACHF

    首先从先序得到第一个为A,就是二叉树的根,回到中序,可以将其分为三部分:    

    左子树的中序序列DBGE,根A,右子树的中序序列CHF   

    接着将左子树的序列回到先序可以得到B为根,这样回到左子树的中序再次将左子树分割为三部分:   

    左子树的左子树D,左子树的根B,左子树的右子树GE

    同样地,可以得到右子树的根为C

    类似地将右子树分割为根C,右子树的右子树HF,注意其左子树为空

    如果只有一个就是叶子不用再进行了,刚才的GEHF再次这样运作,就可以将二叉树还原了。

    

*/


三、归并排序

    

    void merge(int sourceArr[],int tempArr[], int startIndex,int midIndex, int endIndex) {

        

        int i = startIndex;        

        int j = midIndex +1;       

        int k = startIndex;      

        while (i != midIndex +1 && j != endIndex + 1) {

            

            if (sourceArr[i] >= sourceArr[j]) {               

                tempArr[k++] = sourceArr[j++];                

            } else {                

                tempArr[k++] = sourceArr[i++];                

            }            

        }

        

        while (i != midIndex +1) {            

            tempArr[k++] = sourceArr[i++];            

        }

        

        while (j != endIndex +1) {            

            tempArr[k++] = sourceArr[j++];            

        }

        

        for (i = startIndex; i <= endIndex; i++) {            

            sourceArr[i] = tempArr[i];           

        }       

    }

    

    void sort(int souceArr[],int tempArr[], int startIndex,int endIndex) {

        

        int midIndex;

        

        if (startIndex < endIndex) {

            

            midIndex = (startIndex + endIndex) / 2;            

            sort(souceArr, tempArr, startIndex, midIndex);           

            sort(souceArr, tempArr, midIndex +1, endIndex);            

            merge(souceArr, tempArr, startIndex, midIndex, endIndex);            

        }        

    }

    

    

    int main(int argc,const char * argv[]) {

        

        int numArr[10] = {86,37, 56,29, 92,73, 15,63, 30,8};        

        int tempArr[10];        

        sort(numArr, tempArr, 0,9);

        

        for (int i =0; i < 10; i++) {            

            printf("%d, ", numArr[i]);            

        }       

        printf("\n");

        

        return0;

        

    }


谢谢!!!


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值