#define N 11
#include<stdio.h>
#include<stdlib.h>
struct SSTable{
int *elem;
int length;
};
void CreateSSTable(SSTable &s,int r[],int n){
int i;
s.elem=(int *)malloc(sizeof(int)*(n+1));
if(!s.elem){
printf("OverFlow!");
exit(1);
}
for(i=1;i<=n;i++)
s.elem[i]=r[i-1];
s.length=n;
}
/*冒泡排序
最优O(n)
时间复杂度O(n2)
*/
void Ascend(SSTable &s){
int i,j,temp;
bool change=true;
for(i=s.length;i>=1&&change;i--){
change=false;
for(j=1;j<i;j++){
if(s.elem[j]>s.elem[j+1]){
temp=s.elem[j];
s.elem[j]=s.elem[j+1];
s.elem[j+1]=temp;
change=true;
}
}
}
}
/*
Sequential Search:
1、借助哨兵
2、查找成功 ASL=(n+1)/2
3、查找成功与查找不成功 ASL=3*(n+1)/4;
*/
int Search_Sq(SSTable s,int key){
if(s.length==0){
printf("顺序表为空\n");
return 0;
}
int i;
s.elem[0]=key;
for(i=s.length;s.elem[i]!=key;i--);
return i;
}
/*Binary Search: 有序表,限于顺序存储
ASL=log2(n+1)-1
*/
int Search_Bin(SSTable s,int key){
int low=1;
int high=s.length;
while(low<=high){
int mid=(low+high)/2;
if(s.elem[mid]==key)
return mid;
else if(s.elem[mid]>key) high=mid-1;
else low=mid+1;
}
return 0;
}
void SSTableTraverse(SSTable s){
int i;
for(i=1;i<=s.length;i++){
printf("%3d",s.elem[i]);
}
printf("\n");
}
void main(){
int pos;
int e;
SSTable s;
int r[11]={5,13,88,21,75,56,64,37,80,19,92};
CreateSSTable(s,r,N);
printf("请输入带查找元素\n");
scanf("%d",&e);
pos=Search_Sq(s,e);
if(pos!=0)
printf("元素%3d的位置为%3d\n",e,pos);
else printf("查找的元素%3d不存在\n",e);
printf("对数组进行排序\n");
Ascend(s);
SSTableTraverse(s);
printf("请输入带查找元素\n");
scanf("%d",&e);
pos=Search_Bin(s,e);
if(pos!=0)
printf("元素%3d的位置为%3d\n",e,pos);
else printf("查找的元素%3d不存在",e);
}
Sqequential Search And Binary Search
最新推荐文章于 2021-08-01 12:11:36 发布