#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、由于是跳跃式移动,适用于无序,且记录个数较多的情况;