编程珠玑第二章旋转算法
2012-11-13 22:55
253 查看
#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;
}
}
#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;
}
}
相关文章推荐
- 编程珠玑-第二章旋转算法篇
- 编程珠玑第二章读书笔记 第二章 Aha!算法 (手摇法)
- 《编程珠玑》第二章 “杂技算法” 和 “翻转算法” Java语言版
- 剑指offer—第二章算法之二分查找(旋转数组的最小值)
- 编程珠玑:第二章 啊哈,算法三个问题
- 编程珠玑 第二章 算法
- 旋转字符串;编程珠玑第二章;rotate a one-dimensional vector;循环移位数组;编程之美
- 《编程珠玑》第二章——“啊哈!算法”
- 《编程珠玑》-第二章:寻找兄弟单词+电话簿功能 算法研究
- 编程珠玑_第二章_啊哈 算法
- 《编程珠玑》 第二章 算法 习题
- 《编程珠玑》第二章 “杂技算法” 和 “翻转算法” C语言实现
- rotate旋转分析(编程珠玑第二章)
- 第二章 啊哈!算法 (向量旋转)
- 《编程珠玑》第二章 “杂技算法” 和 “翻转算法” C语言实现
- 一维向量旋转算法 编程珠玑 第二章
- 编程珠玑--杂技算法--字符串、数组的旋转
- 编程珠玑第二章的算法实现
- 编程珠玑之第二章:杂耍算法
- 编程珠玑第二章问题B: n元一维向量旋转问题之java实现