蛮力法
来源:互联网 发布:ds数据融合目标识别 编辑:程序博客网 时间:2024/06/05 02:10
以下是本章中出现的算法的c语言实现,恳请批评指正:
1.选择排序:
/*
*作者:Arthur
*时间:2007-3-14
*名称:选择排序算法
*功能:该算法使用选择排序对给定数组排序
*输入:一个可排序数组
*输出:非降序排列的数组
*/
int* SelectionSort(int *a,int n)
{
int i = 0;
int j = 0;
int min = 0;
int temp = 0;
for(i=0;i<=n-2;i++)
{
min = a[i];
for(j=i+1;j<=n-1;j++)
{
if(a[j]<min)
{
min = a[j];
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
return *a;
}
/*测试*/
main()
{
int a[7]={89,45,68,90,29,34,17};
int i = 0;
*a = SelectionSort(a,7);
for(i=0;i<7;i++)
{
printf("%d ",a[i]);
}
getch();
}
2.冒泡排序
/*
*作者:Arthur
*时间:2007-3-14
*名称:冒泡排序算法
*功能:该算法使用冒泡排序对给定数组排序
*输入:一个可排序数组
*输出:非降序排列的数组
*/
int* BubbleSort(int *a,int n)
{
int i = 0;
int j = 0;
int temp = 0;
for(i=0;i<=n-2;i++)
{
for(j=0;j<=n-2;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
return *a;
}
/*测试*/
main()
{
int a[7]={89,45,68,90,29,34,17};
int i = 0;
*a = BubbleSort(a,7);
for(i=0;i<7;i++)
{
printf("%d ",a[i]);
}
getch();
}
3.冒泡排序优化
/*
*作者:Arthur
*时间:2007-3-14
*名称:冒泡排序优化算法
*功能:该算法使用冒泡排序对给定数组排序,
* 如果该数组有序则指进行一次冒泡
*输入:一个可排序数组
*输出:非降序排列的数组
*/
#include <stdio.h>
int* BubbleSort(int *a,int n)
{
int i = 0;
int j = 0;
int temp = 0;
int flag = 0;
for(i=0;i<=n-2;i++)
{
for(j=0;j<=n-2;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = 1;
}
}
if(flag==0)
{
printf("no need to sort!/n");
break;
}
}
return *a;
}
/*测试*/
main()
{
int a[7]={1,2,3,4,5,6,7};
int i = 0;
*a = BubbleSort(a,7);
for(i=0;i<7;i++)
{
printf("%d ",a[i]);
}
getch();
}
4.顺序查找优化
/*
*作者:Arthur
*时间:2007-3-14
*名称:顺序查找优化算法
*功能:顺序查找的算法实现,它用了查找建来作限位器
*输入:一个n各元素的数组A和一个查找键K
*输出:第一个值等于K元素的位置,如果找不到返回-1
*/
int SequentialSearch(int *a,int n,int k)
{
int i = 0;
a[n+1] = k;
while(a[i]!=k)
{
i++;
}
if(i<n)
{
return i;
}
else
{
return -1;
}
}
/*测试*/
main()
{
int a[7]={1,2,3,4,5,6,7};
int i = 0;
i = SequentialSearch(a,7,1);
if(i>-1)
{
printf("the position of 1 is %d ",i);
}
else
{
printf("9 is not exist in the array!");
}
getch();
}
5.字符串匹配
/*
*作者:Arthur
*时间:2007-3-14
*名称:蛮力字符串匹配算法
*功能:该算法实现了蛮力字符串匹配
*输入:一个n个字符的数组代表一段文本
* 一个m个字符的数组代表一个模式
*输出:如果匹配成功,返回文本第一个匹配模式的第一个字符的位置,否则返回-1
*/
int BruteForceStringMatch(char *text,int n,char *patten,int m)
{
int i = 0;
int j = 0;
for(i=0;i<=n-m;i++)
{
j = 0;
while(j<m&&patten[j]==text[i+j])
{
j++;
}
if(j==m)
{
return i;
}
}
return -1;
}
/*测试*/
main()
{
int i = 0;
char a[16] = {'n','o','b','o','d','y','n','o','t','i','c','e','d','h','i','m'};
char b[3] = {'n','o','t'};
i = BruteForceStringMatch(a,16,b,3);
if(i>-1)
{
printf("the first matched position is %d ",i);
}
else
{
printf("there's no position matched");
}
getch();
}
6.字符串匹配次数
/*
*作者:Arthur
*时间:2007-3-14
*名称:蛮力字符串匹配算法计算模式在文本中出现的次数
*功能:计算模式在文本中出现的次数
*输入:一个n个字符的数组代表一段文本
* 一个m个字符的数组代表一个模式
*输出:返回匹配的模式在文本中出现的次数
*/
int BruteForceStringMatchTimes(char *text,int n,char *patten,int m)
{
int i = 0;
int j = 0;
int matched_times = 0;
for(i=0;i<=n-m;i++)
{
j = 0;
while(j<m&&patten[j]==text[i+j])
{
j++;
}
if(j==m)
{
matched_times++;
}
}
return matched_times;
}
/*测试*/
main()
{
int i = 0;
char a[16] = {'n','o','b','o','d','y','n','o','t','i','c','e','d','h','i','m'};
char b[2] = {'n','o'};
i = BruteForceStringMatchTimes(a,16,b,2);
if(i>0)
{
printf("the times this word matched is %d ",i);
}
else
{
printf("there's no word matched");
}
getch();
}
- 蛮力法
- 蛮力法
- 蛮力法
- 蛮力法
- 蛮力法习题
- Coin Change----------蛮力法
- 蛮力法(Brute Force)思想
- 蛮力法之01背包
- 基本算法之蛮力法
- 蛮力法背包问题
- 蛮力法最近对问题
- 蛮力法(一):穷举
- 排序1--冒泡(蛮力法)
- 排序2--选择(蛮力法)
- (三) 蛮力法
- 常见蛮力法排序
- 算法设计之蛮力法
- 蛮力法求解旅行商
- 简单工厂模式
- 揭示“地点域/方位域”的对立对现代汉语句法分析和功能分析的影响。
- Frontline Fields Of Thunder (2007)
- 自己觉得好的东东
- Restorator 2007 3.70.1729
- 蛮力法
- csdn上有意思的php讨论帖
- english short sentence
- ASP.NET 2.0中的跨页面提交
- 关于M_PI的用法
- asp.net 文件读写
- JAVA中对存储过程的调用方法
- oracale 触发器
- 函数参数和Catch参数