常用查找算法

来源:互联网 发布:淘宝男装毛衣 编辑:程序博客网 时间:2024/04/30 12:57

代码

#include<stdio.h>#include<time.h>#include<stdlib.h> /*=================顺序表的查找========================*///顺序表的查找 :平均O(n) 最好O(1) 最差O(n); int SqSearch(int r[],int n, int key){    int i;    for(i=0;i<n;i++){        if(r[i] == key){            return i+1; //返回v第一次出现的位置         }    }     return 0; //没有查找到v }/*=================有序表的查找========================*///交换值void swap(int r[],int i,int j){    int tmp = r[i];    r[i] = r[j];    r[j] = tmp;} //获取中间位置int partition(int r[],int low, int high){    int privotKey = r[low];    while(low<high){        while(low<high && r[high]>=privotKey)high--;        swap(r,low,high);        while(low<high && r[low]<=privotKey)low++;        swap(r,low,high);    }    return low;} //快速排序void quickSort(int r[],int low,int high){    if(low<high){        int privotLoc = partition(r,low,high);        quickSort(r,low,privotLoc-1);        quickSort(r,privotLoc+1,high);     }}//打印 void print(int r[], int n){    int i;    for(i=0;i<n;i++){        printf("%5d",r[i]);        if((i+1)%10==0)printf("\n");    }    printf("\n");}//二分查找 :平均O(log n) 最好O(1)int binarySearch(int r[],int n, int key){    int low,high,mid;    low = 0;    high = n;    while(low<=high){        mid = (low+high)/2;        if(key == r[mid]){            return mid+1;        }else if(key<r[mid]){            high = mid-1;        }else{            low = mid+1;        }       }    return (-1);} int main(){    int i;    int r[100],key;    key = 63;    printf("需要查找的数据:\n");    for(i=0;i<100;i++){ //构建数组         r[i] = rand()%100+1;         printf("%5d",r[i]);        if((i+1)%10 == 0){            printf("\n");         }    }    printf("顺序表查找:");    printf("%d的位置在:%3d\n\n",key,SqSearch(r,100,key));//输出查找结果     printf("\n先进行快速排序使记录有序,快速排序后:\n");    quickSort(r,0,99);     print(r,100);    printf("二分查找:");     printf("%d的位置在:%3d\n\n",key,binarySearch(r,99,key));//输出查找结果     return 0;} 

执行结果

这里写图片描述

0 0
原创粉丝点击