[C] 二分法查找某值的索引 c算法 →→→→→进入此内容的聊天室

来自 , 2020-05-18, 写在 C, 查看 214 次.
URL http://www.code666.cn/view/f8e59f4b
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define MAX 10
  5. #define SWAP(x,y) {int t; t = x; x = y; y = t;}
  6.  
  7. void quicksort ( int[], int, int );
  8. int bisearch ( int[], int );
  9.  
  10. int main ( void )
  11. {
  12.         int number[MAX] = {0};
  13.         int i, find;
  14.         srand ( time ( NULL ) );
  15.  
  16.         for ( i = 0; i < MAX; i++ )
  17.         {
  18.                 number[i] = rand() % 100;
  19.         }
  20.  
  21.         quicksort ( number, 0, MAX-1 );
  22.  
  23.         printf ( "数列:" );
  24.         for ( i = 0; i < MAX; i++ )
  25.                 printf ( "%d ", number[i] );
  26.  
  27.         printf ( "\n输入寻找对象:" );
  28.         scanf ( "%d", &find );
  29.  
  30.         if ( ( i = bisearch ( number, find ) ) >= 0 )
  31.                 printf ( "找到数字于索引 %d ", i );
  32.         else
  33.                 printf ( "\n找不到指定数" );
  34.  
  35.         printf ( "\n" );
  36.  
  37.         return 0;
  38. }
  39.  
  40. int bisearch ( int number[], int find )
  41. {
  42.         int low, mid, upper;
  43.  
  44.         low = 0;
  45.         upper = MAX - 1;
  46.  
  47.         while ( low <= upper )
  48.         {
  49.                 mid = ( low+upper ) / 2;
  50.                 if ( number[mid] < find )
  51.                         low = mid+1;
  52.                 else if ( number[mid] > find )
  53.                         upper = mid - 1;
  54.                 else
  55.                         return mid;
  56.         }
  57.  
  58.         return -1;
  59. }
  60.  
  61. void quicksort ( int number[], int left, int right )
  62. {
  63.         int i, j, k, s;
  64.  
  65.         if ( left < right )
  66.         {
  67.                 s = number[ ( left+right ) /2];
  68.                 i = left - 1;
  69.                 j = right + 1;
  70.  
  71.                 while ( 1 )
  72.                 {
  73.                         while ( number[++i] < s ) ;  // 向右找
  74.                         while ( number[--j] > s ) ;  // 向左找
  75.                         if ( i >= j )
  76.                                 break;
  77.                         SWAP ( number[i], number[j] );
  78.                 }
  79.  
  80.                 quicksort ( number, left, i-1 );   // 对左边进行递回
  81.                 quicksort ( number, j+1, right );  // 对右边进行递回
  82.         }
  83. }
  84.  

回复 "二分法查找某值的索引 c算法"

这儿你可以回复上面这条便签

captcha