代码改变世界

算法-蛮力法

2015-06-27 13:21  聪-_-聪  阅读(1798)  评论(0编辑  收藏  举报

---恢复内容开始---

 

特点:

第一,和其他某些策略不同,我们可以应用蛮力法来解决广阔领域的各种问题。(应用领域广)
第二,对于一些重要的问题来说(比如:排序、查找、矩阵乘法和字符串匹配),蛮力法可以产生一些合理的算法,它们多少具备上些实用价值,而且并不限制实例的规模。
第三,如果要解决的问题实例不多,而且蛮力法可以用一种能够接受速度对实例求解,那么,设计一个更高效算法所花费的代价很可能是不值得的。(代价相对较小)
第四,即使效率通常很低,仍然可以用蛮力法解决一些小规模的问题实例。(适合小规模)
第五,一个蛮力算法可以为研究或教学目的的服务。

 

蛮力法实例

一,

 基本思路:在未排序的数中找到最小(最大)的数和这些数中的第一个(最后一个)交换。

 

时间复杂度:O(n^2)

 

实例代码:

#include <iostream.h>
void SelectSort(int* pData,int Count)
{
    int iTemp;
    int iPos;
    for(int i=0;i<Count-1;i++)
    {
        iTemp = pData[i];
        iPos = i;
        for(int j=i+1;j<Count;j++)
        {
            if(pData[j]<iTemp)
            {
                iTemp = pData[j];
                iPos = j;
            }
        }
        pData[iPos] = pData[i];
        pData[i] = iTemp;
    }
}
 
void main()
{
    int data[] = {10,9,8,7,6,5,4};
    SelectSort(data,7);
    for (int i=0;i<7;i++)
        cout<<data[i]<<" ";
    cout<<"\n";
}

 

二,冒泡排序

 基本思路:通过相邻比较把较大的数和小的数交换,最后达到最大(最小)的数在最下(上)

 

实例代码:

 1 #include <iostream.h>
 2  
 3 void BubbleSort(int* pData,int Count)
 4 {
 5     int iTemp;
 6     for(int i=1;i<Count;i++)
 7     {
 8         for(int j=Count-1;j>=i;j--)
 9         {
10             if(pData[j]<pData[j-1])
11             {
12                 iTemp = pData[j-1];
13                 pData[j-1] = pData[j];
14                 pData[j] = iTemp;
15             }
16         }
17     }
18 }
19  
20 void main()
21 {
22     int data[] = {10,9,8,7,6,5,4};
23     BubbleSort(data,7);
24     for (int i=0;i<7;i++)
25         cout<<data[i]<<" ";
26     cout<<"\n";
27 }

 

---恢复内容结束---