기본적인 알고리즘

ChoRong0824·2022년 10월 17일
0

Algorithm

목록 보기
4/19

기초적인 것들도 주석문으로 상시 설명해야 나중에 완벽히 나의 것이 됌

quick sort Algorithm

// quick sort 알고리즘
#include <stdio.h>
// 상수선언 define (define하면 상수화임.)
#define MAX_SIZE 8
#define SWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t));
int n=MAX_SIZE;
int S[MAX_SIZE]={15,22,13,27,12,10,20,25};
int pp;

int partition(int low,int high,int pp){
    int i, j;
    int pivotitem,temp;
    pivotitem = S[low];
    j=low;
    for(i=low+1;i<high;i++){
        if(S[i]<pivotitem){
            j++;
            SWAP(S[i],S[j],temp);
        }
    }
    pp=j;
    SWAP(S[low],S[pp],temp);
    return pp;
    //return 을 안해주면 S[pp]에서 error -> 당연.
    
}

void quick_sort(int low, int high){

    int i;

    if (high >low ){
        pp=partition(low, high,pp);
        
        printf("input : ");
        for( i=0;i<n;i++)
            printf("%d", S[i]);
        printf("\n");

        quick_sort(low, pp-1);
        quick_sort(pp+1,high);
    }

}
int main(){
    int i;
    printf("input : ");
    for( i=0;i<n;i++)
        printf("%d", S[i]);
    printf("\n");

    // 인데덱스라서 0부터 n-1까지
    quick_sort(0,n-1);
    
    return 0;
}

max size 로 상수값을 지정해서 고정하여, low 값과 high 값, pp =

prim Algorithm

//prim ,퀵솔트, 크로스 카드 시험에 나옴.
#include<stdio.h>
#define VER 5 // 5,5 행렬
#define INF 1000 // 그래프 중에서 가장 큰 값을 사용하면 됌. (무한대 값임)

int W[VER][VER]={
    //{} 게 저장할 예정
    {0,1,3,INF,INF},
    {1,0,3,6,INF},
    {3,3,0,4,2},
    {INF,6,3,0,5},
    {INF,INF,2,5,0}
};
int dist[VER];
int nearest[VER];

void prim(int n){
    int i, u, vnear,ii;
    int min;

    for(u=0;u<n;u++){
        nearest[u]=0; //인덱스가 0부터 시작을해서 0부터 초기화 시켜줌.
        dist[u]= W[0][u];
    }
    //////
    printf("nearest:");
    for(int x=1; x<n;x++)
        printf("%5d", nearest[x]);
    printf("\n");
    
    printf("dist : ");
    for(int x=1; x<n;x++)
        printf("%5d", dist[x]);
    printf("\n");
    
    /////////

    for(ii=1; ii<n;ii++){
        min=1000;

        for(i=1;i<n;i++)
            if(dist[i]>=9 && dist[i] <=min){
                min = dist[i];
                vnear =i;
            }

            //e값 
            printf("(%d,%d)\n",vnear, nearest[vnear]);
            dist [vnear]=-1;

            for (i=1;i<=n;i++){
                if(W[i][vnear]<dist[i]){
                    dist[i]= W[i][vnear];
                    nearest[i]= vnear;
                }
    }
     //////
    printf("nearest:");
    for(int x=1; x<n;x++)
        printf("%5d", nearest[x]);
    printf("\n");
    
    printf("dist : ");
    for(int x=1; x<n;x++)
        printf("%5d", dist[x]);
    printf("\n");
    }
}


    


int main(){
    //호출
    prim(VER);
    return 0;
}
profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글