实验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片段定位)

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

使用 React 实验性中继片段:缺少属性 '"$fragmentRefs"'

[NTUSTISC pwn LAB 5]rop入门实验