实验五

实验结论

Part.1 二分查找

ex1_1.cpp

#include <stdio.h>
const int N=5;
int binarySearch(int x[], int n, int item);
int main() {
int a[N]={21,34,56,87,90};
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;
}

(这两张图片是根据原来老师给的最初的那个代码补齐之后运行出来的结果,下面两张是自己改过数据之后的运行结果)

ex1_2.cpp

#include <stdio.h>
const int N=5;
int binarySearch(int *x, int n, int item);
int main() {
int a[N]={11,15,35,46,78};
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;
} 

(这两张图片是根据原来老师给的最初的那个代码补齐之后运行出来的结果,下面两张是自己改过数据之后的运行结果)

 

Part.2 选择法排序

#include <stdio.h>
#include <string.h>
void selectSort(char str[][20], int n ); 
int main() {
char name[][20] = {"Anna", "Mike", "Charlotte", "Benny", "June"};
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;//用数字k先记录此时最小数的下标 
 for(j=i+1;j<n;j++)
  if(strcmp(str[j],str[k])<0)//如果下标为j的元素比k的元素还要小 
      k=j;// 用k记录最小数j的下标 
      if(k!=i){
          strcpy(temp,str[i]);
          strcpy(str[i],str[k]);
          strcpy(str[k],temp);
      }
}
  }

(上一张图片是根据老师原来的代码运行的结果,下面的图片是改过数据之后的结果)

 

实验总结和体会

1.二分法查找算法里面,ex1_1.cpp和ex1_2.cpp的改动相对来说不是很大,只有后面的子函数中把x[mid]改成了*(x+mid)后面一种用指针的方式间接对数据进行访问。但相对来说我还是比较喜欢ex1_1.cpp的方式多一点...(因为指针这个东西真的奇奇怪怪的让人摸不着头脑而且难以理解=-=

2.选择法排序,这个在写的时候出现了好多问题,像那些中括号里要填的数据下标我老是填错...该填[k]的地方填成了[j]之类的,导致我运行结果一直不对,虽然没有报错(不知道是不是用了Dev-c的缘故)但是结果一直跟老师给的运行截图对不上搞得我好焦灼。我觉得其实可能还是我自己没理解它的逻辑关系,我最后的正确结果是被我试了好几次试出来的...

3.使用指针变量对字符串进行处理,这个感觉有点神奇,我看了好几遍才看懂(大概是我理解能力不太行...)

4.这次试验完了之后感觉指针这个东西没啥必要啊它除了好麻烦以外我觉得它没有什么太大的作用了0-0不知道是不是有什么情况下指针比较方便但是我就是感觉它又麻烦又不好使。(我写东西的时候尽量能不用就不用吧它真的让我感到头大x

 

评论博文看这里⬇

https://www.cnblogs.com/yesung/p/10946412.html
https://www.cnblogs.com/wznn/p/10939732.html
https://www.cnblogs.com/zxy-345/p/10938956.html

posted @ 2019-05-25 21:42  吕姿璇  阅读(203)  评论(8编辑  收藏  举报