实验5
Posted couldi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验5相关的知识,希望对你有一定的参考价值。
1.二分查找
ex1-1
#include <stdio.h> const int N=9; int binarySearch(int x[], int n, int item); int main() { int a[N]={1,3,7,9,16,21,33,44,57}; int i,index, key; printf("数组a中的数据:\\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\\n"); printf("输入待查找的数据项: "); scanf("%d", &key); index = binarySearch(a, N, key); if(index>=0) printf("%d在数组中,下标为%d\\n", key, index); else printf("%d不在数组中\\n", key); return 0; } int binarySearch(int x[], int n, int item) { int low, high, mid; low = 0; high = n-1; while(low <= high) { mid = (low+high)/2; if (item == x[mid]) return mid; else if (item < x[mid]) high = mid - 1; else low = mid + 1; } return -1; }
ex-1-2
#include <stdio.h> const int N=9; int binarySearch(int *x, int n, int item); int main() { int a[N]={1,3,9,16,21,44,57,88,97}; int i,index, key; printf("数组a中的数据:\\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\\n"); printf("输入待查找的数据项: "); scanf("%d", &key); index = binarySearch(a, N, key); if(index>=0) printf("%d在数组中,下标为%d\\n", key, index); else printf("%d不在数组中\\n", key); return 0; } int binarySearch(int *x, int n, int item) { int low, high, mid; low = 0; high = n-1; while(low <= high) { mid = (low+high)/2; if (item == *(x+mid)) return mid; else if(item < *(x+mid)) high = mid - 1; else low = mid + 1; } return -1; }
2,
选择法排序
ex2-2
#include <stdio.h> #include <string.h> void selectSort(char str[][20], int n ); int main() { char name[][20] = {"John", "Alex", "Joseph", "Candy", "Geoge"}; int i; printf("输出初始名单:\\n"); for(i=0; i<5; i++) printf("%s\\n", name[i]); selectSort(name, 5); printf("按字典序输出名单:\\n"); for(i=0; i<5; i++) printf("%s\\n", name[i]); return 0; } void selectSort(char str[][20], int n) { int i,j,k; char temp[20]; for(i=0;i<n-1;i++){ k=i; for(j=i+1;j<n;j++) if(strcmp(str[k],str[j])>0) k=j; if(k!=i){ strcpy(temp,str[i]); strcpy(str[i],str[k]); strcpy(str[k],temp);} } }
总结和体会
二分法查找算法
数组和指针表示数组元素的差别
数组中的第一个元素a[1]
用指针表示 *(p+1)
相互之间的关系
*p=a;a[i]=*(p+i);p=&a[0];
选择法排序
字符数组的赋值不能用a[]=b[];比较大小也能用大于小于直接比较;
strcmp用于字符数组的大小比较;
在选择法排序中,我之前一直会把strcmp(str[k],str[j])的比较写成str[i]和str[j]的比较,但实际上应该是数组中最小的和下一个比较,如果不是k,那么就是第i个一直和后面的比较。
对于这一部分我觉得还是要多看书多理解,这部分和前面的知识联系紧密,所以还要把前面的知识巩固和回忆。
以上是关于实验5的主要内容,如果未能解决你的问题,请参考以下文章
[NTUSTISC pwn LAB 7]Return to libc实验(puts泄露libc中gadget片段定位)