数据结构与算法相辅相成,彼此不能独立存在
编程是工具,算法和数据结构才是灵魂
1.数据结构:
存数据,按照一系列的逻辑关系,比如说先进先出,先进后出,对应的数据结构里面处理问题的时候可能就更方便,为算法的设计提高了效率。
根据不同的数据的存储特点,可以使用不同的数据结构,然后以此来提高算法的效率。
2.算法:
有 输入、输出、有限步骤结束 的这样的一个程序,就可以称之为一个算法了。
算法/程序有好有坏,其判定方法就是指标。
指标分为时间复杂度、空间复杂度、稳定性。
(其中 时间复杂度 考察的最多)
时间复杂度 实质 ——算法的计算次数
重点 ①算法时间复杂度: 当n→∞时算法的计算次数
②算法的实际计算次数/真实时间复杂度 实际算法计算次数
eg1:
int main(){
int n;
int count;
for(int i = 1 ; i < n ; i++){
for(int j = 1 ; j < n ; j++){
count++;
}
}
for(int i = 1 ; i < n ; i++)
count++;
cout<<count;
}
//算法时间复杂度: o(n^2) //算法的实际计算次数/真实时间复杂度: o(n^2+n) (取大头,∞²远大于∞本身,所以算法时间复杂度省略掉∞,同理∞³、∞²、∞相加取∞³)
eg2:
//冒泡排序
/*算法的时间复杂度:o(n^2)
(这里是最坏/平均时间复杂度,对应完全逆序或随机数据的情况,最好为 o(n))
真实时间复杂度:o((n^2)/2)
常见的算法时间复杂度:o(1)、o(logn)、o(n)、o(n^2)、o(n^3)……*/
int main(){
int n,a[100];
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int j=n-1;j>0;j--){
for(int i=0;i<n-1;i++){
if(a[i]>a[i+1])
swap(a[i],a[i+1]);
}
}
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}