공부중

[알고리즘]자기 구성 순차 탐색(Self-Organizing Sequential Search) – 전위법(Transpose method) 본문

Programing/알고리즘

[알고리즘]자기 구성 순차 탐색(Self-Organizing Sequential Search) – 전위법(Transpose method)

곤란 2013. 2. 7. 17:14
반응형

전위법은 찾고자 하는 해당 데이터를 찾았을 시

바로 이전 항목과 교환한다

 

그 외에는 전진 이동법과 같다..

 

7

4

2

10

8

6

1

3

9

5

여기 이러한 데이터 집합이 있다. 여기서6을 찾아보자.

     

    

7

4

2

10

8

6

1

3

9

5

6을 찾았다!

          

7

4

2

10

6

8

1

3

9

5

6의 앞에 있는 8과 자리 교환을 한다.

 

main.cpp

#include <iostream>

 

static const int ARRAY_MIN = 0;

static const int ARRAY_MAX = 10;

 

int TransposeMethod(int *DataBank, const int nSerchVal);

 

int main( )

{

    int nArray[ARRAY_MAX] = { 8,6,4,7,5,1,3,9,2,0 };

 

    int nSerchVal = 0;

 

    while(true)

    {

        std::cout<<"찾고자 하는 숫자를 입력해주세요"<<std::endl;

        std::cout<<"배열안의 숫자는 0 ~ 9까지 입니다."<<std::endl;

        std::cout<<"음수를 입력하면 종료됩니다."<<std::endl;

        std::cin>>nSerchVal;

 

        if( 0 > nSerchVal )

        {

            break;

        }

        else

        {

            std::cout<<"찾는 숫자는"<<

            TransposeMethod( nArray , nSerchVal )

            <<"번째에 있습니다."<<std::endl;

        }

    }

 

}

 

int TransposeMethod(int *DataBank, const int nSerchVal)

{//전위법

    for( int nCount = ARRAY_MIN ; ARRAY_MAX > nCount ; ++nCount )

    {

        if( nSerchVal == DataBank[nCount] )

        {

            const int nIndexTemp = nCount;

            const int nTemp = DataBank[nCount];

 

            if( 0 == nIndexTemp )

            {

                //이동할 필요가 없음

            }

            else

            {

                DataBank[nIndexTemp] = DataBank[nIndexTemp-1];

                DataBank[nIndexTemp-1] = nTemp;

            }    

            return nIndexTemp;

        }

    }

    std::cout<<"찾고자 하는 데이터가 없습니다."<<std::endl;

    return false;

}

 

출력결과

 

반응형