算法总结
1、蛮力法
直接粗暴,就行循环。例如:
选择排序:利用循环每次选出最小的数依次放在序列最前面,时间复杂度为 O(n^2),具有不稳定性。
代码如下:
#include<iostream>
using namespace std;
#define N 7
//选择排序(蛮力法,每次选出最小的放在最前面)
void selectSort(int a[]) {
for(int i=0;i<N-1;i++) {
int k = i;//临时存放最小值
for(int j=i+1;j<N;j++) {
if(a[k]>a[j]) {
k = j;
}
}
int t = a[i];//将最小值放在 i 的位置
a[i] = a[k];//即交换a[i] 和 a[j] 的值
a[k] = t;
}
}
int main() {
int a[] = {
8,2,7,0,3,6,5};
selectSort(a);
for(int i=0;i<N;i++)
cout<<a[i]<<" ";
cout<<endl;
getchar();
return 0;
}
冒泡排序:利用循环依次比较相邻两个数的大小,每次将最大的数沉淀下来,即放在序列末尾。时间复杂度为 O(n^2),具有稳定性。
代码如下:
#include<iostream>
using namespace std;
#define N 7
//冒泡排序(蛮力法,相邻两个数之间的比较,每次选出最大的数放在最后)
void bubbleSort(int a[]) {
for(int i=0;i<N;i++) {
//外层循环,比较轮数
for(int j=0;j<N-1-i;j++) {
//内层循环,相邻的比较
if(a[j]>a[j+1]) {
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;//交换,将最大的沉淀下来
}
}
}
}
int main() {
int a[] = {
8,2,7,0,3,6,5};
bubbleSort(a);
for(int i=0;i<N;i++)
cout<<a[i]<<" ";
cout<<endl;
getchar();
return 0;
}
最大连续子序列问题:利用循环依次求前面所有数据从规定起点开始的和,若和为负,则令其为零,否则求最大连续子序列和。
#include<iostream>
using namespace std;
#define R 6
//最大连续子序列问题
int maxsubSum(int a[]) {
int maxSum = 0;//最大连续子序列
int thisSum = 0;//本次求和
for(int i=0