step3 . day8数据结构之算法
關于算法,理解的不算很深刻,了解到好的算法不僅在時間的節約和空間的利用上,都最求最優的代碼。
比較經典的算法就是各種排序、查找了,下面貼兩個理解比較深的優化算法(二分查找在順序二叉樹那里寫過了,不再重復,哈希查找的重點在于映射方法和沖突的解決)
1.上臺階問題,100個臺階,可以走1個2個和5個,有多少總方案,我自己優化的話,只能從暴力窮舉→有限窮舉→去除無效窮舉這幾個方向優化,不過最終的代碼給了我很多的啟發,找規律后再寫代碼會好的多,代碼如下
#include<stdio.h>
int fun1(){
int count = 0;
int i,j,k;
for(i=0;i<=100;i++)
for(j=0;j<=100;j++)
for(k=0;k<=100;k++){
if(i+2*j+5*k==100)
count++;
}
printf("count in fun1 = %d\n",count);
printf("fun1循環 %d 次\n",i*j*k);
}
int fun2(){
int count = 0;
int i,j,k;
for(i=0;i<=20;i++)
for(j=0;j<=50;j++)
for(k=0;k<=100;k++){
if(5*i+2*j+k==100)
count++;
}
printf("count in fun2 = %d\n",count);
printf("fun2循環 %d 次\n",i*j*k);
}
int fun3(){
int count = 0;
int i,j;
for(i=0;i<=20;i++)
for(j=0;j<=50;j++)
{ if(5*i+2*j<=100)
count++;
}
printf("count in fun3 = %d\n",count);
printf("fun3循環 %d 次\n",i*j);
}
int fun4(){
int count = 0;
int i;
for(i=0;i<=100;i+=5)
count+=(100-i+2)/2;
printf("count in fun4 = %d\n",count);
printf("fun4循環 %d 次\n",i/5);
}
1.快速排序法:思想是將第一個數作為標的,從前和從后分別找大于和小于的書,區分放入位置,已到達將標的放到中間,兩邊的總體大小已經排序OK,進而遞歸調用繼續排序。
#include<stdio.h>
int bubblesort(int a[],int size){
int i,j,k=0;
for(i=0;i<size-1;i++){
for(j=0;j<size-i-1;j++){
if(a[j]>a[j+1]){
a[j] += a[j+1];
a[j+1] = a[j]-a[j+1];
a[j] = a[j]-a[j+1];
k++;
}
}
}
return k;
}
void show(int a[],int size){
int i;
for(i=0;i<size;i++){
printf("%d ",a[i]);
}
printf("\n");
}
static count =0;
int quicksort(int a[],int lift,int right){
if(lift>=right)
return -1;
int i = lift;
int j = right;
int temp = a[i];
while(i<j){
while(i<j && temp <= a[j]){
j--;
count++;
}
a[i]=a[j];
printf("________________\n");
show(a,8);
while(i<j && a[i] <= temp)
{ i++;
count++;
}
a[j]=a[i];
printf("________________\n");
show(a,8);
}
a[i]=temp;
printf("____________________________\n");
show(a,8);
quicksort(a,lift,i-1);
quicksort(a,i+1,right);
return count;
}
?
轉載于:https://www.cnblogs.com/huiji12321/p/11279458.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的step3 . day8数据结构之算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC 3.0学习系列文
- 下一篇: might用法