1.蛮力法
蛮力法也称穷举法或者枚举法,设计思想:采用一定的策略依次处理待求解问题的所有元素,从而找出问题的解。
蛮力法在查找问题中的应用
- 顺序查找
顺序查找是在查找集合中依次查询值为k的元素,若成功找出,则给出该元素在查找集合中的位置,若查找失败,则给出失败信息。
算法实现如下:
public static int getIndex(int[] arr,int k){
for(int i =0;i<arr.length;i++){
if(k == arr[i]){
return ++i;
}
}
return -1;
}
- 串匹配问题
蛮力法在排序问题中的应用
- 选择排序
选择排序的基本思想是第i趟排序在无序序列Ri~Rn中找到值最小的记录,并和第i个记录交换作为有序序列的第i个记录。
代码实现如下:
public static void selectSort(int[] arr){
int index ;
int temp ;
for(int i = 0 ; i < arr.length;i++){
index = i ;
for(int j = i+1;j<arr.length;j++){
if(arr[index]>arr[j]){
index = j;
}
}
if(index != i ){//若不是最小交换位置
temp = arr[i];
arr[i]= arr[index];
arr[index] = temp;
}
}
}
- 冒泡排序
冒泡排序的基本思想是两两比较相邻的记录,如果反序则交换,直到没有反序的记录为止。
代码实现如下
public static void bubbleSort(int[] arr){
int temp ;
for(int i = arr.length-1 ; i > 0;i--){
for(int j = 0;j<i;j++ ){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
蛮力法在组合问题中的应用
- 背包问题
- 任务分配问题
蛮力法在图中的应用
- 哈密顿回路问题
- TSP问题
蛮力法在几何问题中的应用
- 最近对问题
- 凸包问题
2.分治法
在排序问题中的应用
- 归并排序
归并排序的基本思想是将一个大的序列分成小的序列进行排序然后合并结果集
代码实现如下
- 快速排序
实现代码如下
public static void quickSort(int[] arr,int start,int end){
if(start>=end){
return;
}
int low = start,high = end,index =start,temp;
while (low<high){
while (low<high){
if(arr[high]<arr[index]){
temp = arr[high];
arr[high]=arr[index];
arr[index]= temp;
index = high;
break;
}else {
high--;
}
}
while (low<high){
if(arr[low]>arr[index]){
temp = arr[low];
arr[low]=arr[index];
arr[index]=temp;
index = low;
break;
}else {
low++;
}
}
}
if(start<index){
quickSort(arr,start,index-1);
}
if(index<end){
quickSort(arr,index+1,end);
}
}
在组合问题中的应用
- 最大子短和问题
- 棋盘覆盖问题
在几何问题中的应用
- 最近对问题
- 凸包问题
3.减治法
在查找问题中的应用
- 折半查找
- 二叉树查找
在排序问题中的应用
- 插入排序
插入排序的基本思想是将数组分成两个部分,第一部门有序,第二部分无序,将无序区的第一个数插入到有序区的指定位置
代码实现如下:
/**
* 插入排序实现
* @param arr
*/
public static void quiteSort(int[] arr){
int temp ;
for(int i = 1; i<arr.length;i++){
temp = arr[i];
for(int j = i-1;j>=0;j--){
if(arr[j+1]<arr[j]){
arr[j+1] = arr[j];
arr[j] = temp;
}else {
break;
}
}
}
}
- 堆排序
在组合问题中的应用
- 淘汰赛冠军问题
- 假币问题
4.动态规划法
5.贪心法
6.回溯法
7.分支限界法
8.近似算法
9.概率算法