蛮力法

来源:互联网 发布: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();
}

 
原创粉丝点击