[C] 插补搜寻法查找某值的索引 c算法 →→→→→进入此内容的聊天室

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

回复 "插补搜寻法查找某值的索引 c算法"

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

captcha