以下是本章中出现的算法的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();
}