蠻力法:是一種簡單直接地解決問題的方法,常常直接給予問題的描述和所涉及的概念定義。
1. 選擇排序
算法:
SelectionSort(Array a)
//該算法用選擇排序對給定數組排序
//輸入:一個可排序數組 A[0,1,….n-1]
//輸出:一個已排序數組 A[0,1,….n-1](升序)
for i <—0 to n-1 do
min<— i
for j <—i to n-1
if(A[j]<A[min])
min=j
swapA[i] and A[min]
實現:
void selectionSort(double a[],int iLen)
{
for(int i=0;i<iLen;++i)
{
int min=i;
for(int j=i;j<iLen;++j)
if(a[j]<a[min])
min=j;
{
double temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
2. 冒泡排序
算法:
BubbleSort(Array a)
//該算法用冒泡排序對給定數組排序
//輸入:一個可排序數組A[0,…..n-1]
//輸出:一個已排序數組 A[0,…..n-1]
for i<- n-1 to 1
forj<- 0 to i-1
ifa[j]>a[j+1]
swapa[j] and a[j+1]
實現:
void bubleSort(double a[],int iLen)
{
for(int i=iLen-1;i>0;–i)
{
for(int j=0;j<i;++j)
{
if(a[j]>a[j+1])
{
double temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
3. 順序查找
算法:
seqSearch(Array a, Key k)
//該算法用順序查找來找出某個鍵值時候在數組中
//輸入:一個n元素的數組a和一個查找鍵k
//輸出:第一個鍵值等於k的元素的位置,否則返回-1
for i<— 0 to n-1do
if a[i]=k
returni
return -1
實現:
int seqSearch(inta[],int iLen,int iKey)
{
for(int i=0;i<iLen;++i)
if(a[i]==iKey)
return i;
return-1;
}
4. 蠻力字符串匹配
算法:
bruteForeStringMatch(Array a , Array b)
//該算法用蠻力法對字符串進行匹配
//輸入:一個由n個字符的數組 a[0,….n-1]代表一段文本
一個有m個字符的數組 b[0,…m-1]代表一個模式
//輸出:成功就返回第一個匹配子串的第一個字符的位置,失敗返回-1
for i<- 0 to n-1 do
j<-0
whilej<m and a[i+j]=b[j] do
j<-j+1
ifj=m
returni
return -1
實現:
int bruteForceStringMatch(char a[],int iLenA,char b[],int iLenB)
{
for(int i=0;i<iLenA-iLenB;++i)
{
int j=0;
while(j<iLenB&&a[i+j]==b[j])
++j;
if(j==iLenB)
return i;
}
return -1;
}
5. 最近對問題
算法:
bruteForceClosestPoint( P)
//使用蠻力算法求出最近的兩個點
//輸入:包含n個點的點集P={(x0,y0),(x1,y1)…..(xn-1,yn-1)}
//輸出:距離最近的頂點對的索引 index1,index2
dmin<- ∞
index1<- 0
index2<-0
for i<- 0 to n-2 do
forj<-i+1 to n-1 do
dTemp<-(xi-xj)^2+(yi-yj)^2
if(dTemp<dmin)
dmin<-dTemp
index1<-i
index2<-j
return (index1,index2)
6. 凸包問題
算法:
bruteForceOuter(Vertexs)
//使用蠻力法求出凸包的邊(頂點對)
//輸入:包含n個點的點集V={(x0,y0),(x1,y1)…..(xn-1,yn-1)}
//輸出:無(打印出頂點對)
for i<-0 to n-2 do
forj<-i+1 to n-1 do
a<-yj-yi
b<-xi-xj
c<-xj*yi-xi*yj //ax+by+c=0
k<-0
flag<- 0
tempFlag<-0
fork<-0 to n-1 do
tempFlag<-a*xk+b*yk+c
ifflag=0 and tempFlag!=0
flag<-tempFlag
elseif flag!=0 and tempFlag!=0
flag*tempFlag<0
break;
ifk=n
print(xi,yi),(xj,yj)
//下面3個問題都可以通過窮舉法來解決
7. 旅行商問題
8. 揹包問題
9. 分配問題