#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ElementType int
typedef struct {
ElementType *elem;
int tableLen;
}SSTable;
void initaSSTable(SSTable &table){
table.elem=(ElementType*)malloc(20*sizeof(ElementType));
table.tableLen=0;
srand(time(0));
for (int i = 0; i < 15; ++i) {
//生成范围在5,24之间的随机数
int num = rand() % 20 + 5;
table.elem[i]=num;
table.tableLen++;
printf("%d ",table.elem[i]);
}
}
void BubbleSort(SSTable &table){
ElementType temp=0;
for (int i = 0; i < table.tableLen; ++i) {
for (int j = i+1; j < table.tableLen; ++j) {
if(table.elem[i]<table.elem[j]){
temp=table.elem[i];
table.elem[i]=table.elem[j];
table.elem[j]=temp;
}
}
}
printf("\nafter bubble sort \n");
for (int i = 0; i < table.tableLen; ++i) {
printf("%d ",table.elem[i]);
}
}
bool BiSearch(SSTable table,ElementType num,int &pos){
int high=table.tableLen-1;
int low=0;
int mid;
while (high>=low){
mid=(high+low)/2;
if (table.elem[mid]==num){
pos=mid+1;
return true;
}
else if(table.elem[mid]<num){
high=mid-1;
}
else{
low=mid+1;
}
}
pos=-1;
return false;
}
//函数名存储的是函数的入口地址,也是一个指针,为函数指针类型
//left指针和right指针指向数组中的任两个元素
//qsort规定left指针指向值大于right指针指向的值,返回正值为从小到大排序
int compare(const void *left,const void *right){
//从大到小排序
return *(ElementType*)right-*(ElementType*)left;
}
int main() {
SSTable table;
initaSSTable(table);
//BubbleSort(table);
int pos=0;
printf("\n");
//stdlib自带的qsort
qsort(table.elem,table.tableLen,sizeof(ElementType),compare);
for (int i = 0; i < table.tableLen; ++i) {
printf("%d ",table.elem[i]);
}
BiSearch(table,10,pos);
if(pos>0){
printf("\nthe num is at %d pos",pos);
}
return 0;
}
折半查找c
最新推荐文章于 2024-10-19 15:29:34 发布