快排,二分查找

来源:互联网 发布:网络交换机的价格 编辑:程序博客网 时间:2024/04/29 18:25
#include <stdio.h>#include <stdlib.h>int partition(int a[], int b, int e){int i, j;int t;i = rand()%(e+1 - b) + b;t = a[i];a[i] = a[e];a[e] = t;i = b - 1;for (j = b; j < e; j++){if (a[j] <= a[e]){i ++;t = a[i];a[i] = a[j];a[j] = t;}}i ++ ;t = a[i];a[i] = a[e];a[e] = t;return i;}void qsort(int a[], int b, int e){if (b >= e)return;int p = partition(a, b, e);qsort(a, b, p-1);qsort(a, p+1, e);}int bin_search(int a[], int b, int e, int s){int l, h, m;l = b;h = e;// 多个值相同,返回最后一个// 主要看h与l能否相遇// 多个值相同,返回哪个主要看 = m在哪。while(h > l){m = l + (h - l) /2 + 1;if (a[m]<= s)l = m;elseh = m -1;}printf("%d\n", l);if (a[l] == s)return 1;return 0;}int main(){int a[100];int i, j;for (i =0; i < 100; i++){a[i] = rand()%1000;printf("%d:%d\n",i, a[i]);}qsort(a, 0, 99);for (i =0; i < 100; i++)printf("%d:%d\n",i, a[i]);printf("there is %d", bin_search(a, 0, 99, 827));system("pause");}

0 0