码迷,mamicode.com
首页 > 其他好文 > 详细

实验5

时间:2019-05-26 17:47:43      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:字典序   sea   binary   oid   temp   sort   dex   void   回忆   

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

标签:字典序   sea   binary   oid   temp   sort   dex   void   回忆   

原文地址:https://www.cnblogs.com/couldi/p/10926335.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!