A. Algoritmo complexidade de tempo
1. recursiva acumulação i ~ j:
#include<stdio.h>
int fun(int k,int n){
if(n<=k){ //最后一个数
return k; //函数出口
}
else{
return fun(k,n-1)+n; //递归累加,将本次的n与n-1相加并继续计算
}
}
int main(){
int result = fun(1,100);
printf("%d",result);
return 0;
}
O resultado:
divertido retorno (k, n-1) + n; a frequência de execução da instrução é T (n).
complexidade de tempo é O (N), o programa retorna como divertimento esta função é adicionada à corrente a partir do n-n para a frente até que diminuição n <n a K = k mais retorna o resultado final obtido.
2. Optimize a complexidade de tempo
C implementado usando classificação binária:
#include<stdio.h>
int a[101],n;
void quick_sort(int left,int right) {
int i , j, temp ,t;
if(left > right){
return;
}
temp = a[left]; //以第一个数为基准
i = left;
j = right;
while(i!=j){
while(a[j]>=temp && i<j){ //从后往前与temp比较
j--; //temp比不过a[j],前移一位继续与temp比较
}
while(a[i]<=temp && i<j){ //从前往后与temp比较
i++; //temp比a[i]大则与后一位继续比较
}
if(i<j){ //直到不满足以上条件了
//交换数组
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i]; //将交换的这一个数组重新指定为临时变量
a[i] = temp; //将一开始的临时变量放到该位置
//以交换的位置为界分开处理,继续二分处理
quick_sort(left,i-1);
quick_sort(i+1,right);
return ;
}
int main(){
int i;
printf("输入总共多少个数据:\n");
scanf("%d",&n);
printf("输入准备排序的数据:\n");
for( i = 1;i <= n; i++){
scanf("%d",&a[i]);
}
quick_sort(1,n);
printf("快速排序后的数据:\n");
for( i = 1;i <= n; i++){
printf("%d ",a[i]);
}
}
Usando dicotomia é possível reduzir o número de vezes de execução do código para optimizar a complexidade de tempo, o número de cálculos é: o ASL = {[(. N- + 1) / n-] Iog2 ^ * (. N- + 1)} . - 1, de modo que a complexidade de tempo do programa grau de O (log2N).
Executar a estrutura do seu programa como uma estrutura de árvore:
3. O pior complexidade de tempo.
Bolha implementar a classificação:
#include <stdio.h>
int main(){
int a[10];
int i,j,temp=0;
printf("输入准备排序的数字:");
for(i = 0;i<10;i++){
scanf("%d",&a[i]);
}
for(i=0;i<9;i++){ //从a[0]开始与其他数组比较
for(j=0;j<10-i;j++){ // 排好的数组放在n-i位的后一位,所以不需要与这些数组比较
if(a[j+1]<a[j]){ //从小到大排序
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<10;i++){
printf("%3d",a[i]);
}
return 0;
}
O resultado:
De tempo a ler o tempo de operação de 3.999s, a complexidade do algoritmo é o pior caso isto é, n * n (n ^ 2).