資料結構之(三)之陣列篇
阿新 • • 發佈:2019-01-04
①設計一個演算法,將一維陣列A(下標從1開始)中的元素迴圈右移k位,要求 只用一個元素大小的附加儲存空間。給出演算法的時間複雜度。
#include<stdio.h> int Cir(int a[],int n,int k)//陣列a,陣列的 個數,迴圈的位數 { for(int i=0;i<k;i++) { int t; t=a[n-1]; for(int j=n-1;j>0;j--)//依次右移 { a[j]=a[j-1]; } a[0]=t; } } int main() { int a[]={0,53,43,25,32,24,54,87,234}; Cir(a,9,5); for(int i=0;i<9;i++) { printf("%5d",a[i]); } return 1; }
此演算法用了一個int型別的儲存空間空間複雜度為O(1),時間複雜度為O(n的平方)。
②若二維矩陣中的某個元素aij是第i行中的最小值,同是又是第j列中的最大值,則稱此元素為該矩陣的一個馬鞍點,試編寫演算法求出矩陣中的所有馬鞍點
#include<string.h> #include<stdio.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x) int maan(int a[][10],int n) { int i,j,k; for(i=0;i<n;i++ ) { int min=a[i][0]; int t; for( j=1;j<n;j++) { if(a[i][j]<min) { min=a[i][j]; } } for( k=i+1;k<n;) { if(min>a[k][j]) k++; } if(k==10) { printf("%2d%2d%2d\n",i,j,min); } } } int main() { int a[10][10]; memset(a,0,sizeof(a)); srand((int)time(0)); for(int x=0;x<10;x++) for(int j=0;j<10;j++) { a[x][j]=random(100); } for(int x=0;x<10;x++) { for(int j=0;j<10;j++) { printf("%3d",a[x][j]); } printf("\n"); } maan(a,10); }
用到了<time.h>以時間隨機產生種子給二維陣列賦值。