#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;
else
h = 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");
}
快排,二分查找
最新推荐文章于 2023-05-07 14:28:14 发布