算法学习笔记1-时间复杂度&&选择排序&&冒泡排序

时间复杂度&&空间复杂度&&选择排序&&冒泡排序&&插入排序

时间复杂度

概念

在一个算法上花费的时间

计算方法

  1. 忽略常量,如果运行时间是常数量级,则用1表示
  2. 忽略低次幂
  3. 忽略高次幂系数

让我们来看几个例子

1.常数算法O(1)

int sumr=0;

2.线性算法O(N)

//输出一个数组中的所有元素
    for (int k = 0; k <lengt ; ++k) {
        printf("%d\t",array[k]);
    }

3.O(n^2)

//冒泡排序算法
for (int j = 0; j <10 ; ++j) {
        for (int i = j; i <10 ; ++i) {
            if(array[i]<array[i+1])
                swp(array[i],array[i+1]);//交换两个值的自定义函数
        }
    }
  1. 折半查找O(logN)
//求1到10的累加和
int i = 0;
int sum=0;
while(i<=n){
    sum+=i;
}

额外空间复杂度

除去样本量外还需要都少额外辅助空间,这个空间即为额外空间复杂度

冒泡排序(BubbleSort)

时间复杂度O(n^2)

#include<iostream>
using namespace std;

void swap(int Array[],int i,int j){
	int temp=Array[i];
	Array[i]=Array[j];
	Array[j]=temp;
}

void BubbleSort(int Array[],int lenght){
	if (lenght<2){
		return ;
	}else{
		for(int i=0;i<lenght-1;i++){
			for(int j=0;j<i;j++){
				if(Array[j]<Array[j+1]){
					swap(Array,j,j+1);
				}
			}
		}
	}
}

int main(){
	int Array[]={12,34,1,5};
	int lenght=sizeof(Array)/sizeof(int);
	BubbleSort(Array,lenght);
	for(int i=0;i<4;i++){
		printf("%d\t",Array[i]);
	}
}

选择排序(SelectSort)

时间复杂度O(n^2)

#include<iostream>
using namespace std;

void swap(int Array[],int i,int j){
	int temp=Array[i];
	Array[i]=Array[j];
	Array[j]=temp;
}

void SelectSort(int Array[],int lenght){
	if (lenght<2){
		return ;
	}else{
		for(int i=0;i<lenght-1;i++){
			for(int j=i+1;j<lenght;j++){
				if(Array[i]<Array[j]){
					swap(Array,i,j);
				}
			}
		}
	}
}

int main(){
	int Array[]={12,34,1,5};
	int lenght=sizeof(Array)/sizeof(int);
	SelectSort(Array,lenght);
	for(int i=0;i<4;i++){
		printf("%d\t",Array[i]);
	}
}

插入排序(InsertionSort)

跟数据状况有关

最好情况:有序=》O(N)

最差情况:逆序=》O(N^2)

平均情况:O(n^2)(最差情况下的指标)

#include<iostream>
using namespace std;

void swap(int Array[],int i,int j){
	int temp=Array[i];
	Array[i]=Array[j];
	Array[j]=temp;
}

void InsertionSort(int Array[],int lenght){
	if (lenght<2){
		return ;
	}else{
		for(int i=1;i<lenght;i++){
			for(int j=i-1; j>=0 && Array[j]<Array[j+1];j--){
				swap(Array,j,j+1);
			}
		}
	}
}

int main(){
	int Array[]={12,34,1,5};
	int lenght=sizeof(Array)/sizeof(int);
	InsertionSort(Array,lenght);
	for(int i=0;i<4;i++){
		printf("%d\t",Array[i]);
	}
}
发布了27 篇原创文章 · 获赞 1 · 访问量 1051

猜你喜欢

转载自blog.csdn.net/qq_45205390/article/details/103467828