728x90
반응형

<목차>

1.정렬이란?

2. selection sort(선택정렬)

3. insertion sort(삽입정렬)

4. shell sort(셸정렬)

 

정렬이란?


자료를 일정한 기준에 따라 나열하는 것

큰 순서대로 정렬을 하는 오름차순과 작은 순서대로 정렬하는 내림차순이 존재

이와 관련된 여러 정렬 알고리즘이 존재

 

 

 

selection sort(선택정렬)


선택정렬이란 가장 작은(큰) 데이터를 찾아 가장 앞에 있는 데이터와 교환화는 방식

※데이터가 정렬이 되어 있든 없든 상관없이 일정한 시간을 가진다.

 

<코드>

public class selection_sort {
	
	public static void main(String args[]) {
		int[] arr = {1,5,4,2,7};
		int min;
		int i,j;
		for(i=0; i<arr.length-1; i++) {
			min = i;
			for(j=i+1; j<arr.length; j++) {
				if(arr[j]<arr[min])
					min=j;
			}
			swap(arr,i,min);	
		}
		for(i=0; i<arr.length; i++)
			System.out.print(arr[i]);
	}
	static void swap(int[] arr, int a,int b) {
		int temp;
		temp =arr[a];
		arr[a]=arr[b];
		arr[b]=temp;
		
	}

}

 

 

 

insertion sort(삽입정렬)


삽입 정렬이란 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해 가며 정렬하는 방식

 

※ 데이터가 이미 정렬되어 있을 경우 시간이 빠르고 정 반대의 경우 느리다.

 

public class insertion_sort {
	public static void main(String args[]) {
		int[] arr = {1,5,4,2,7};
		int i,j;
		for(i=1; i<arr.length; i++)
			for(j=i; arr[j]<arr[j-1]&&j>0; j--)
				swap(arr,j,j-1);
		for(i=0; i<arr.length; i++)
			System.out.print(arr[i]);
		
	}
	static void swap(int[] arr,int i,int j) {
		int temp;
		temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
	

}

 

shell sort(셸정렬)


셸 정렬이란 주어진 데이터를 특정 매개변수 값의 길이를 갖는 부파일(subfile)로 쪼개서, 각 부파일에서 정렬을 수행한다. 부파일의 길이가 1이될 때까지 이 과정을 반복한다.

사용하는 이유는 삽입정렬에서 내림차순으로 정릴할 때 가장 작은 데이터가 끝에 있을 경우 많은 시간이 걸리는 것을 방지하기 위함이다.

 

※ 부파일로 이미 나눴기 때문에 최종적으로 부파일이 1이 되었을 때 대부분 정렬이 되어있다.

 

보통 부파일(h)의 길이는 h(1)=1 , h(i) = h(i-1)*3+1의 수열을 이용한다.

e.g. h1=1 h2 = 4 h3 = 13 ...

 

public class shell_sort {

	public static void main(String[] args) {
		int[] arr = {1,5,4,2,7,3,16,9};
		int i,j;
		int h=1;		
		while(true) {
			if(arr.length>h*3+1)
				h = h*3+1;
			else
				break;
		}
		while(h!=0) {
		for(i=h; i<arr.length; i++) {
			for(j=i; j-h>0&&arr[j]<arr[j-h]; j-=h)
				swap(arr,j,j-h);			
		} 
		h = h/3;
		}
		for(i=0; i<arr.length; i++)
			System.out.print(arr[i]);
	}
	static void swap(int []arr,int a,int b) {
		int temp;
		temp = arr[a];
		arr[a]=arr[b];
		arr[b]=temp;
	}
}

 

 

 

 

#자바 #정렬알고리즘 #선택정렬 #삽입정렬 #셸정렬

 

반응형
728x90
반응형

CSS란?


css란 cascading style sheets로 웹 문서의 전반적인 스타일을 미리 저장해둔 스타일시트이다.

 

 

 

 

 

CSS를 이용한 꾸미기


html,css,js는 많은 방법으로 코드를 짜고 실행할 수 있다.

앞서 1강에서 설명했듯이 메모장을 이용해도 되고 비쥬얼스튜디오코드를 이용해도 된다.

또한, 웹에서 코딩이 가능한 클라우드 통합 개발환경을 이용해 코드를 짤 수 있다.

필자는 클라우드 통합 개발 환경을 이용해 진행했다.

 

 

 

이런 식으로 기본적인 코드가 쳐져있으며 오른쪽 상단에 보는 Open Preview를 통해 미리볼 수도 있다.

또한, 왼쪽에 style.css가 있는데 이를 통해 글의 스타일을 바꿔보도록 하겠다.

 

<!DOCTYPE html>
<html>
	<head>
		<link rel="stylesheet" href="style.css">
	</head>
	<body>
		<div>
			Hello World
		</div>
        <div>
            Hello World2            
        </div>
        <div>            
            Hello World3
        </div>
	</body>
</html>

이런 식으로 같은 크기가 출력되는데 글자의 크기를 바꾸기 위해서는 font-size를 이용해 바꾼다.

 

<style을 바로 삽입>

<!DOCTYPE html>
<html>
	<head>
		<link rel="stylesheet" href="style.css">
	</head>
	<body>
	    <div style= "font-size: 2rem">
		Hello World
	    </div>
            <div style= "font-size: 3rem">
                Hello World2            
            </div>
            <div style= "font-size: 4rem">            
                Hello World3
            </div>
	</body>
</html>

 

 

이렇게 style을 바로 적어 글자의 크기를 바꿀 수 있다. 하지만 font-size만 바꾼다면 짧지만 color,center등 많은 것들을 추가하게 되면 코드가 지저분해질 수 있다. 이는 style.css와 class를 이용하면 해결이 가능하다.

 

 

<Class를 이용해 수정>

<html>

<!DOCTYPE html>
<html>
	<head>
		<link rel="stylesheet" href="style.css">
	</head>
	<body>
	    <div class="ex1">
		Hello World
	    </div>
            <div class="ex2">
                Hello World2            
            </div>
            <div class="ex3">            
                Hello World3
            </div>
	</body>
</html>

 

<css>

.ex1{
    font-size: 2rem;
}
.ex2{
    font-size: 3rem;
}
.ex3{
    font-size: 4rem;
}

각 div에 class를 넣어주고 css에 font-size를 추가에 원하는 크기를 넣어주면 좀 더 깔끔하게 바꿀 수 있다.

 

 

.ex1{
    font-size: 2rem;
    text-align: center;
}
.ex2{
    font-size: 3rem;
}
.ex3{
    font-size: 4rem;
}

 

또한, 이런 식으로 text-align: center를 이용하면 아래 보는 거와 같이 글의 위치를 바꿀 수도 있다.

 

 

<!DOCTYPE html>
<html>
	<head>
		<link rel="stylesheet" href="style.css">
	</head>
	<body>
        <div class= "ex">            
	    <div class="ex1">
		Hello World
	    </div>
            <div class="ex2">
                Hello World2            
            </div>
            <div class="ex3">            
                Hello World3
            </div>
            
        </div>
	</body>
</html>
.ex1{
    font-size: 2rem;
}
.ex2{
    font-size: 3rem;
}
.ex3{
    font-size: 4rem;
}
.ex{
    text-align: center;
}

 

이런 식으로 각각의 div태그를 다른 div태그로 전체를 감싼 후 전체를 힌 번에 변경할 수도 있다.

 

 

 

 

 

최종 결과물 사이트 - (빅데이터로 분석한 노래 추천)


 

 

datauzu.net/

 

빅데이터로 추천하는 노래

목소리로 때리는 음색 깡패 해외에 온 거만 같은 팝송 지금 당장 떠나고 싶은 여행 두근두근 썸 게임 실력 상승

datauzu.net

 

반응형

'웹피이제작(html,css,js)' 카테고리의 다른 글

1. html를 이용한 기초 홈페이지 제작  (0) 2021.03.02
728x90
반응형

HTML이란?


HTML이란 Hypertext Markup Language로 웹 문서를 제작하는데 있어 기본적인 웹 언어이다.

 

 

 

기초 홈페이지 제작


<html>
	<head>		
	</head>
	<body>		
	</body>
</html>

 

기본적으로 html은 이러한 태그 형식을 가지고 있다.

이때 <head> </head>이 부분의 경우 홈페이지에 정보를 나타내기도 하며 나중에 구글,네이버 검색에 필요한 정보를 이 부분에 저장하기도 한다.

<body> </body>의 경우 html에 몸체에 해당한다고 보면된다. 대부분의 태그를 body 태그 안에 위치되어 있으며 이를 통해 웹 사이트를 구성 해준다.

 

<html>
	<head>
		<title>homepage</title>
	</head>
	<body>
		Hello World
	</body>
</html>

 

이런식으로 원하는 문장을 적고 적은 코드를 웹 사이트로 바꿀려면 다양한 방법이 존재하는데 가장 간단한 방법은 컴퓨터에 깔려있는 메모장을 이용한 방법이다.

 

 

1) 메모장 적기

 

2) .html 저장

메모장에 코드를 적은 후 다른 이름으로 저장하는데 이때 .html을 붙여준다. 이러면 저장된 위치에 메모장이 아닌 웹 사이트를 볼 수 있다. 또한, 연결프로그램을 메모장으로 할 경우 코드 수정도 가능하다.

 

 

최종적으로 이러한 웹 사이트가 제작된 것을 볼 수 있다. 

title태그에 있던 홈homepage가 위에 표시되어 있고 body태그 안에 있던 Hello World가 출력된 것을 볼 수 있다.

 

 

 

 

 

 

 

최종 결과물 사이트 - (빅데이터로 분석한 노래 추천)


datauzu.net/

 

빅데이터로 추천하는 노래

목소리로 때리는 음색 깡패 해외에 온 거만 같은 팝송 지금 당장 떠나고 싶은 여행 두근두근 썸 게임 실력 상승

datauzu.net

 

반응형
728x90
반응형

 

안녕하세요 이번 포스팅은 바로

"자료구조 중 큐(Queue)"

입니다

 

자료구조는 컴퓨터공학과처럼 코딩하는 전공을

진학하면 배우는 과목입니다.

지금 배우는 주제인 큐는 스택과 더불어 가장 기초적이면서도

다른 곳에서도 많이 쓰인다고 보시면됩니다.

이러한 큐를 두가지 방법으로 해보겠습니다.

하나는 직접 큐함수(add,delete)를 만들어보는 것이고

또 다른 하나는 기존에 있던 라이브러리를 통해

큐 함수(add,delete)를 써보는 것입니다.

 

 

큐(Queue)의 정의


한 쪽 끝에서만 삽입과 삭제가 이루어지는 스택과는 달리

한 쪽 끝에서는 삭제, 반대쪽 끝에서는 삽입만 가능한 순서화 리스트이다.

그리고 가장 먼저 삽입된 원소가 가장 먼저 삭제되는 형태인데 

이는 First in First out(FIFO)라 불린다.

 

삽입과 삭제가 이루어지는 함수 add와 delete가 존재하며

add는 rear의 위치에서 발생하고 delete는 front의 위치에서 발생한다.

이런 식으로 rear에서는 삽입이 이루어지고 front에서는 삭제가 이루어진다.

 

 

 

큐(Queue) 직접 구현 - JAVA


<변수선언>

	static int rear = -1;
	static int front = -1;	
	static int full;
	static Integer[] queue;

 

스택은 한 곳에서 삽입과 삭제가 이루어지기 때문에 top 하나만 선언해주었지만

큐의 경우는 삽입,삭제가 반대 쪽에서 이루어지므로 rear,front 두 가지 변수를 선언합니다.

이때 rear,front 둘 다 -1로 초기화를 해주는데 이는 아직 값이 없다는 가정을 하는 것입니다.

 

그리고 full은 스택이 가득찼는 지 확인하기 위해 사용을 해줍니다.

stack은 큐를 배열로 설정해줍니다.

 

 

<ADD>

	static void add(int num) {
		if(rear+1==full)
			System.out.println("queue full");
		else
			queue[++rear] = num;
	
	}

rear는 삽입이 일어나는 곳인데 rear+1이 full의 위치와 같다면 스택이 가득찼음을 의미합니다.

이유는 num을 삽입할 때 전위연산자를 쓰기 때문에 if문에서도 +1을 해준 후 비교를 해줍니다.

그리고 if문을 통해 같으면 "stack full" 출력해줍니다.

 

else일 경우 스택에 값을 넣어주는데 이때 먼저 rear의 값을 증가시킨 뒤 num을 넣습니다.

이는 앞서 초기화에서  rear를 -1로 했는 이유이기도 합니다.

 

 

스택의 크기를 4로 주어 설정했기 때문에 add 함수 호출이 5번이 되는 시점 부터는

계속 "stack full"이 지속적으로 출력되는 것을 볼 수 있습니다.

 

 

<DELETE>

	static void delete() {
		if(rear==front)
			System.out.println("queue empty");
		else
			System.out.println(queue[++front]);
	}

delete 역시 if문이 존재하는데 이때 if문은 rear와 front를 비교해줍니다.

rear와 front가 같은 위치에 있다는 것은 스택에 값이 없다는 것을 의미하고 "stack empty"를 출력해줍니다.

이 역시 초기에 rear = -1 front = -1을 해주어 스택에 값이 없다는 것을 의미해줍니다

 

 

 

스택과는 다르게 delete를 했을 때 먼저 들어간 3 부터 나오는 것을 볼 수 있습니다.

또한, add를 3번 호출했기 때문에 delete가 4번 호출될 때 부터 "queue empty"를 출력하는 모습을 볼 수 있습니다.

 

 

 

 

 

 

 

큐(queue) 직접구현 - 최종코드


import java.util.Scanner;
public class Queue {	
	static int rear = -1;
	static int front = -1;	
	static int full;
	static Integer[] queue;	
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		full = sc.nextInt();
		queue = new Integer[full];		
			
	}
	static void add(int num) {
		if(rear+1==full) {
			System.out.println("queue full");
		}
		else
			queue[++rear] = num;	
	}
	static void delete() {
		if(rear==front)
			System.out.println("queue empty");
		else
			System.out.println(queue[++front]);
	}

}

scanner를 이용해 배열의 크기를 받았습니다.

 

 

끝으로


이상으로 자료구조에 있어 가장 기초적이라고 할 수 있는

큐에 대해 알아보고 직접 구현해 보았습니다.

이보다 더 좋은 코드가 많기 때문에 작성된 코드는

단순 참고용으로 보시면 될 거 같습니다.

궁금한 점이나 문제점이 있으시면 댓글 남겨주시면 감사하겠습니다.

이상으로 읽어주셔서 감사합니다!!

반응형

+ Recent posts