How fast can you make linear search?

前端 未结 20 1865
死守一世寂寞
死守一世寂寞 2020-12-23 21:46

I\'m looking to optimize this linear search:

static int
linear (const int *arr, int n, int key)
{
        int i = 0;
        while (i < n) {
                      


        
20条回答
  •  既然无缘
    2020-12-23 22:03

    If you're on an Intel platform:

    int linear (const int *array, int n, int key)
    {
      __asm
      {
        mov edi,array
        mov ecx,n
        mov eax,key
        repne scasd
        mov eax,-1
        jne end
        mov eax,n
        sub eax,ecx
        dec eax
    end:
      }
    }
    

    but that only finds exact matches, not greater than or equal matches.

    In C, you can also use Duff's Device:

    int linear (const int *array, int n, int key)
    {
      const int
        *end = &array [n];
    
      int
        result = 0;
    
      switch (n % 8)
      {
        do {
      case 0:
        if (*(array++) >= key) break;
        ++result;
      case 7:
        if (*(array++) >= key) break;
        ++result;
      case 6:
        if (*(array++) >= key) break;
        ++result;
      case 5:
        if (*(array++) >= key) break;
        ++result;
      case 4:
        if (*(array++) >= key) break;
        ++result;
      case 3:
        if (*(array++) >= key) break;
        ++result;
      case 2:
        if (*(array++) >= key) break;
        ++result;
      case 1:
        if (*(array++) >= key) break;
        ++result;
        } while(array < end);
      }
    
      return result;
    }
    

提交回复
热议问题