编程珠玑第二章旋转算法

#include <string.h>

#include <stdio.h>

#include <math.h>

#include <time.h>

#define MAX_LEN 50

 

void rotate(char *,int);

void rotate1(char *,int);

void reverse(char *,int,int);

 

int main(int argc,char *argv)

{

    time_t s_time= 0,e_time = 0;

    charstr[MAX_LEN] = "abcoooooooooooooooooxyz";

    int i;

    intcount_time = 0;

/*  str[0]= 'a';

    str[1] = 'b';

    str[2] = 'c';

    str[MAX_LEN-1]= 'W';

    str[MAX_LEN-2]= 'W';

    str[MAX_LEN-3]= 'W';*/

    time(&s_time);

    rotate1(str,8);

    time(&e_time);

    count_time =abs(e_time - s_time);

    printf("timecosted:%ds\n",count_time);

    puts(str);

    return 0;

}

 

void rotate(char str[],int n)

{

    int i,j;

    chartmp_str[MAX_LEN];

    for (i = 0;i< n; i++)

    {

       tmp_str[i]= str[i];

    }

    for (j = 0;i< strlen(str);i++,j++)

    {

       str[j] =str[i];

    }  

    for (i = 0; i< n;i++)

    {

       str[strlen(str)-n+i]= tmp_str[i];

    }

}

void rotate1(char str[],int n)

{

    reverse(str,0,n-1);

//  puts(str);

//  printf("n= %d strlen = %d\n",n,strlen(str)-1);

    reverse(str,n,strlen(str)-1);

//  puts(str);

    reverse(str,0,strlen(str)-1);

//  puts(str);

}

void reverse(char str[],int s,int e)

{

    int i;

    char tmp;

    for (i = 0; i<= (e-s)/2; i++)

    {

       tmp =str[s+i];

       str[s+i] =str[e-i];

       str[e-i] = tmp;  

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值