二分查找 冒泡

来源:互联网 发布:淘宝运费险退换货流程 编辑:程序博客网 时间:2024/06/08 03:44

#include <stdlib.h>#include <stdio.h>//使用二分查找法前提,必须是一个已排序数组void init_array(int a[], int n){    int i;    srand(time(NULL));    for (i = 0; i < n; i++)        a[i] = rand() % 100;}void show_array(int a[], int n){    int i;    for (i = 0; i < n; i++)        printf("%d\n", a[i]);}void sort_array2(int a[],int n){int i,j,temp;for(i=0;i<n-1;i++){//for(j=i;j<n-1;j++){ //冒泡排序,每次排好的都放在后面,所以不能这么些。for(j=0;j<n-1-i;j++){if(a[j]>a[j+1]){temp =a[j];a[j] = a[j+1];a[j+1] = temp;}}}}void sort_array(int a[], int n){    int i, j, tmp;    for (i = 0; i < n; i++)        for (j = 1; j < n-i; j++)            if (a[j-1] > a[j]) {                tmp = a[j-1];                a[j-1] = a[j];                a[j] = tmp;            }}//二分查找,两种实现,递归实现和循环实现/*int search_array(int a[], int n, int key){   int l = 0, r = n, m;   while(r >= l) {       m = (l+r)/2;       if (key == a[m])           return m;       else if (key > a[m])           l = m+1;       else if (key < a[m])           r = m-1;    }   return -1;}*/int search_array(int a[], int l, int r, int key){    int m;    if (l > r)        return -1;        m = (l+r)/2;    if (key == a[m])        return m;    else if (key > a[m])        search_array(a, m+1, r, key);    else if (key < a[m])        search_array(a, l, m-1, key);}int main(void){    int a[100], b, res;    init_array(a, 100);    sort_array(a, 100);    show_array(a, 100);    scanf("%d", &b);    //res = search_array(a, 100, b);    res = search_array(a, 0, 100-1, b);    if (res == -1)        printf("un find\n");    else        printf("array %d item is %d\n", res, a[res]);    return 0;}












0 0
原创粉丝点击