알고리즘 구현 노트(지속 업데이트)

7020 단어 복습 노트

거품 정렬
#include 
#include 
#include 
 
static void  bubble_sort(int array[],int n)
{
    int i,j,tmp;
    for(j=0;jarray[i+1])
            {
                tmp = array[i];
                array[i] = array[i+1];
                array[i+1] = tmp;
            }
        }
    
    }
 
 
    
}
int main (int argc, char **argv)
{
   int a[6] = {5,2,6,4,1,3};
   bubble_sort(a,6);
   int i = 0;
   for(i;i<6;i++)
       printf("%d
",a[i]); return 0; }

strstr(판단 서브열)
#include 
#include 
#include 
#include 
 
const char *my_strstr(const char *str,const char *sub_str)
{
    int i;
    for(i=0;str[i]!='\0';i++)
    {
        int tmp = i;
        int j=0;
        while(str[i++]==sub_str[j++])
        {
            if(sub_str[j]=='\0')
                return &str[tmp];
        }
        i = tmp;
 
    }
    return NULL;
}
 
int main(void)
{
    char *s1="12345";
    char *s2="34";
    printf("%s
",my_strstr(s1,s2)); }

 
strcpy (문자열 복사)
#include 
#include 
#include 
#include 
 
char *my_strcpy(char *dest, const char *src)
{
    assert(dest);
    assert(src);
    char *tmp = dest;
    while((*dest++=*src++)!='\0')
        ;
    return tmp;
}
int main(int argc, char ** argv)
{
    char a[10];
    char *b = "hello";
    printf("%s
",my_strcpy(a,b)); return 0; }

 
strncpy (하위 문자열 복사 전 n 바이트)
#include 
#include 
#include 
#include 
 
char *my_strncpy(char *dst, const char *src,size_t count)
{
    assert(dst&&src);
    char *tmp = dst;
    while(count)
    {
        if((*dst=*src)!=0)
        {
            dst++;
            src++;
        }
        count--;
    }
    *dst = '\0';
    return tmp;
}
int main()
{
    char a[5] = "hello";
    char *b = "12345";
    printf("%s
",my_strncpy(a,b,6)); }

 
strcat (문자열 연결)
#include 
#include 
#include 
#include 
 
char *my_strcat(char *dest, const char *src)
{
    assert(dest);
    assert(src);
    char *tmp = dest;
    while(*dest)
        dest++;
    while((*dest++=*src++)!='\0')
        ;
    return tmp;
}
int main(int argc, char ** argv)
{
    char a[10] = "world";
    char *b = "hello";
    printf("%s
",my_strcat(a,b)); return 0; }

 
strncat
#include 
#include 
#include 
#include 
 
char *my_strncat(char *dest, const char *src, size_t count)
{
    assert(dest);
    assert(src);
    char *tmp = dest;
    if(count)
    {
        while(*dest)
            dest++;
        while((*dest++=*src++)!='\0')
	{
            if(--count==0)
            {
                *dest = '\0';
                break;
            }
	}
    }
    return tmp;
}
int main(int argc, char ** argv)
{
    char a[10] = "world";
    char *b = "hello";
    printf("%s
",my_strncat(a,b,3)); return 0; }

 
strcmp (문자열 비교)
#include 
#include 
#include 
#include 
 
int my_strcmp(const char *cs, const char *ct)
{
    assert(cs);
    assert(ct);
    unsigned char c1,c2;
    while(1)
    {
       c1 = *cs++; 
       c2 = *ct++; 
       if(c1!=c2)
           return c1 < c2 ? -1 : 1;
       if(!c1)
           break;
    }
    return 0;
}
int main(int argc, char ** argv)
{
    char a[10] = "gello";
    char *b = "hello";
    printf("%d
",my_strcmp(a,b)); return 0; }

 
memmove:
#include
#include
 
void my_memmove(void *p1,void const *p2,size_t count)
{	
        assert(p1);
	assert(p2);
	char *dest = (char *)p1;
	char *src = (char *)p2;
	if((dest > src) && (dest 

memcpy
void *memcpy(void *dest, const void *src, size_t count)
{
     char *tmp = dest;
     const char *s = src;
 
     while (count--)
         *tmp++ = *s++;
     return dest;
 }

문자열 역순
#include 
#include 
#include 
#include 
 
char *reverse(char *dest, const char *src)
{
    assert(dest);
    assert(src);
    char *tmp = dest;
    int len,i;
    len = strlen(src);
    dest[len] = '\0';
    for(i=0;i

이분법
#include
//    
int recurbinary(int *a, int key, int low, int high)
{
    int mid;
    if(low > high)
        return -1;
    mid = low + (high-low)/2;
    if(a[mid] == key) return mid;
    else if(a[mid] > key)
        return recurbinary(a,key,low,mid -1);
    else
        return recurbinary(a,key,mid + 1,high);
}
 
//     
int binary( int *a, int key, int n )
{
    int left = 0, right = n - 1, mid = 0;
    mid = left + (right - left) / 2;
    while( left < right && a[mid] != key )
    {
        if( a[mid] < key ) {
            left = mid + 1;
        } else if( a[mid] > key ) {
            right = mid;
        }
        mid = ( left + right ) / 2;
    }
    if( a[mid] == key )
        return mid;
    return -1;
}
int main()
{
    int a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677};
    int b[] = {677,1,7,11,67};
    int i;
    for( i=0; i

volatile 키워드
volatile로 정의된 변수는 이 변수가 예상치 못한 변화를 일으킬 수 있음을 나타냅니다. 이 변수를 사용할 때 레지스터에 저장된 백업을 사용하지 않고 메모리에서 데이터를 다시 읽어야 합니다.
eg:
(1) 병렬 장치의 하드웨어 레지스터;상태 레지스터
(2) 서비스 중단 서브루틴에서 접근할 수 있는 비자동 변수;
(3) 다중 스레드 응용에서 몇 개의 임무에 의해 공유되는 변수;
static 키워드
(1) 함수 체내static 변수의 작용 범위는 이 함수체로 auto 변수와 다르며 이 변수의 메모리는 한 번만 분배되기 때문에 그 값은 다음 호출 시 지난번 값을 유지한다.(2) 모듈 내의static 전역 변수는 모듈 내에서 사용하는 함수에 접근할 수 있으나 모듈 밖의 다른 함수에 접근할 수 없다.(3) 모듈 내의static 함수는 이 모듈 내의 다른 함수에만 호출되고 이 함수의 사용 범위는 성명된 모듈에 제한된다.
const 키워드
(1) 변수가 바뀌는 것을 막으려면const 키워드를 사용할 수 있습니다.이const 변수를 정의할 때, 일반적으로 그것을 초기화해야 한다. 왜냐하면 이후에 그것을 바꿀 기회가 없기 때문이다.(2) 바늘에 대해 말하자면 바늘 자체를const로 지정할 수도 있고 바늘이 가리키는 데이터를const로 지정하거나 양자를const로 동시에 지정할 수도 있다.(3) 하나의 함수 성명에서 const는 형삼을 수식하여 입력 매개 변수로서 함수 내부에서 그 값을 바꿀 수 없음을 나타낸다.(4) 클래스의 구성원 함수에 대해const 형식으로 지정하면 상수 함수로 클래스의 구성원 변수를 수정할 수 없음을 나타낸다.

좋은 웹페이지 즐겨찾기