#include #include #include #define MAX 10 #define SWAP(x,y) {int t; t = x; x = y; y = t;} void quicksort ( int[], int, int ); int bisearch ( int[], int ); int main ( void ) { int number[MAX] = {0}; int i, find; srand ( time ( NULL ) ); for ( i = 0; i < MAX; i++ ) { number[i] = rand() % 100; } quicksort ( number, 0, MAX-1 ); printf ( "数列:" ); for ( i = 0; i < MAX; i++ ) printf ( "%d ", number[i] ); printf ( "\n输入寻找对象:" ); scanf ( "%d", &find ); if ( ( i = bisearch ( number, find ) ) >= 0 ) printf ( "找到数字于索引 %d ", i ); else printf ( "\n找不到指定数" ); printf ( "\n" ); return 0; } int bisearch ( int number[], int find ) { int low, mid, upper; low = 0; upper = MAX - 1; while ( low <= upper ) { mid = ( low+upper ) / 2; if ( number[mid] < find ) low = mid+1; else if ( number[mid] > find ) upper = mid - 1; else return mid; } return -1; } void quicksort ( int number[], int left, int right ) { int i, j, k, s; if ( left < right ) { s = number[ ( left+right ) /2]; i = left - 1; j = right + 1; while ( 1 ) { while ( number[++i] < s ) ; // 向右找 while ( number[--j] > s ) ; // 向左找 if ( i >= j ) break; SWAP ( number[i], number[j] ); } quicksort ( number, left, i-1 ); // 对左边进行递回 quicksort ( number, j+1, right ); // 对右边进行递回 } }