算法期末复习(一)

本文是对算法的复习总结,包括蛮力法、递归和分治法的应用实例。详细介绍了选择排序和冒泡排序这两种O(n^2)时间复杂度的排序算法,以及递归在解决fibonacci数列和全排列问题中的应用。最后,讨论了快速排序和归并排序作为分治法的典型例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法总结

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值