기초적인 것들도 주석문으로 상시 설명해야 나중에 완벽히 나의 것이 됌
// 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 ,퀵솔트, 크로스 카드 시험에 나옴.
#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;
}