编程珠玑第二章旋转算法

来源:互联网 发布:域名能转入公司吗 编辑:程序博客网 时间:2024/05/18 20:09

#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;  

    }

}