数据结构查找方法

#include <stdio.h>
#include <stdlib.h>
int main( )
{
    int i,S;
    int a[100];
    printf("请输入数字(空格分隔),\n");   
    printf("全部输入后,输入0并回车!\n");
    for(i=0;i<100;i++){    //用for循环给数组元素赋值
        scanf("%d",&a[i]);
        if(a[i]==0) break; //接收到0,则退出循环
    }
    printf("数组位置查询(输入0结束查询):\n");
    do{
        printf("输入目标值:");
        scanf("%d",&S);
        i=0;
        if(S==0) break;            //输入0结束查询
        while(a[i]!=0){
            if(a[i]==S) break;     //找到目标退出循环
            i++;
        }
        if(a[i]==S)
            printf("%d\n",i+1);    //输出名次
        else
            printf("查询无获!");
    }while(S!=0);
    system("pause");
    return 0;
}
b!s!y!s,b!g!x!n!z!n!z!!q!k!h!d!y!

顺序查找特点:顺序和链式存储都可以、时间复杂度O(n);

                                  


#include<stdio.h>
#define prey 6;
void main(){
int middle=0;
int left=0;
int goal;
int arr[]={1,2,3,4,5,6,7,8,9,10};
int right=sizeof(arr)/sizeof(int)-1;
int runTime=0;
for(goal=16;left<=right;){
middle=(left+right)/2;
if(goal==arr[middle]){
printf("你找的数字%d已在数组arr%d这个位置找到\n",goal,middle);
printf("你找的数字%d寻找了%d次",goal,runTime);
break;
}else if(goal>arr[middle]){
left=middle+1;
}else if(goal<arr[middle]){right=middle-1;}
runTime++;
if(left>right){printf("你输入的数字%不在数组中",goal);}
}        
getchar();
}

二分查找(折半查找):先比较后移动(动态),时间复杂度为O(n^2),

特点1:只能用于顺序存储的有序表、关键字比较最多:log 2^n +1、时间复杂度:log2 ^n;


附:数据结构排序算法分析

排序分类:插入、交换、选择排序;

插入:

《一》直接插入排序:

1、使用顺序查找法来排序

2、先比较关键字,再移动记录

3、最好情况:比较n-1次,移动0次;最坏情况:比较n^2/2次,移动n^2/2次,平均n^2/4,

时间复杂度O(n^2);

《二》折半插入排序:

1、关键字比较仅依赖于记录个数;

2、比较次数log2^i +1(向下取整);

3、与直接插入排序查找方法不同,插入次数也不同,但和移动次数相同!

4、时间复杂度为O(n^2);

5、只用于顺序存储;

《三》希尔排序

时间复杂度:O(n^3/2);

特点:当待排序记录个数较少,待排序序列的关键字基本有序时,效率较高;

1、跳跃式移动导致排序方法不稳定;

2、只能用于顺序存储

3、由于是跳跃式移动,适用于无序,且记录个数较多的情况;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值