삽입 정렬(Insertion Sort)은 배열의 구간을 정한다음 원소를 비교하며 정렬을 하는 방식입니다.

1. 0 번째 인덱스의 원소와 1 번째 인덱스의 원소를 비교 합니다. (ex. 범위는 0-1 인덱스)

2. 1 번째 원소가 0 번째 원소보다 작으면 첫 번째 원소의 인덱스는 1 증가하고 두 번째 원소의 인덱스는 1 감소합니다.

3. 이런식으로 범위가 1씩 증가하며 원소를 비교한 뒤 큰 숫자의  인덱스를 1씩 늘려주고 작은 숫자의 인덱스를 숫자 만큼 감소 해주세요. 

 

아래는 위의 순서에 맞게 실행한 예제입니다.

- 배열에 저장되는 값은 [3, 6, 0, 9, 1] 입니다.

Sequence Array Arrange
1 [3, 6, 0, 9, 1] 변화 없음
2 [3, 6, 0, 9, 1] 0(a[2] -> a[0])
3(a[0] -> a[1])
6(a[1] -> a[2])
3 [0, 3, 6, 9, 1] 1(a[4] -> a[1])
3(a[1] -> a[2])
6(a[2] -> a[3])
8(a[3] -> a[4])

 

 

 

아래는 삽입 정렬을 구현한 자바 예제입니다.

package algorithm;

import java.util.Arrays;

public class InsertionSort {

	public static void main(String[] args) {
		int[] a = { 3, 6, 0, 9, 1 };
		int[] sorted_a = insertionSort(a);
		System.out.println(Arrays.toString(sorted_a));
	}

	public static int[] insertionSort(int[] a) {
		int i, j;
		for (i = 0; i < a.length; i++) {
			int temp = a[i];
			int range = i-1;
			while (range >= 0 && a[range] > temp) {
				a[range+1] = a[range];
				range--;
			}
			a[range+1] = temp;
		}
		return a;
	}
}

 

버블 정렬은(Bubble Sort) 두 인접한 원소를 순차적으로 정렬하는 방법이고 2가지 순서가 있습니다.

1. 첫 번째 원소와 두 번째 원소를, 두 번째 원소와 세 번째 원소를 ... N-1번째 원소와 N번째 원소를 비교 합니다.

2. 1회전이 끝나면 가장 큰 원소가 맨 마지막으로 이동하기 때문에 다음 회전에서의 마지막은 N-2 원소와 N-1 원소가 됩니다.

 

아래는 위의 순서에 맞게 실행한 예제입니다.

- 배열에 저장되는 값은 [3, 6, 0, 9, 1] 입니다.

Sequence Table Values Result
1 [3, 6, 0, 9, 1]  6<->0 [3, 0, 6, 9, 1]
1 [3, 0, 6, 9, 1] 9<->1 [3, 0, 6, 1, 9]
2 [3, 0, 6, 1, 9] 3<->0 [0, 3, 6, 1, 9]
3 [0, 3, 6, 1, 9] 6<->1 [0, 3, 1, 6, 9]
4 [0, 3, 1, 6, 9] 3<->1 [0, 1, 3, 6, 9]

 

 

 

아래는 선택 정렬을 구현한 자바 예제입니다.

 


package algorithm;

import java.util.Arrays;

public class BubbleSort {

	public static void main(String[] args) {
		int[] a = { 3, 6, 0, 9, 1 };
		int[] sorted_a = bubbleSort(a);

		System.out.print(Arrays.toString(a));
	}

	public static int[] bubbleSort(int[] a) {
		int i, j, temp;
		for (i = a.length - 1; i > 0; i--) {
			for (j = 0; j < i; j++) {
				if (a[j] > a[j + 1]) {
					temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
			}
		}
		return a;
	}

}

선택 정렬(Selection Sort)는 제자리 정렬의 알고리즘이며 3가지 순서가 있습니다.

1. 주어진 배열 값들 중에서 최소값을 찾습니다.

2. 그 최소값을 실행 순서의 값과 교체를 합니다.

3. 그렇게 첫 번째, 두 번째...마지막 -1회 까지 1, 2번 과정을 진행 합니다.

 

아래는 위의 순서에 맞게 실행한 예제입니다.

- 배열에 저장되는 값은 [3, 6, 0, 9, 1] 입니다.

Sequence Table Minimum Value
1 [3, 6, 0, 9, 1] 0
2 [0, 6, 3, 9, 1] 1
3 [0, 1, 3, 9, 6] 6
4 [0, 1, 3, 6, 9] -

 

 

아래는 선택 정렬을 구현한 자바 예제입니다.

package algorithm;

public class SelectionSort {

	public static void main(String[] args) {
		int[] a = { 3, 6, 0, 9, 1 };
		int[] sorted_a = selectionSort(a);
		System.out.print(Arrays.toString(a)
	}

	public static int[] selectionSort(int[] a) {
		int i, j;
		int temp;
		for (i = 0; i <= a.length - 1; i++) {
			for (j = 0; j <= a.length - 1; j++) {
				if (a[i] < a[j]) {
					temp = a[i];
					a[i] = a[j];
					a[j] = temp;
				}
			}
		}
		return a;
	}

}


 

스프링 프로젝트에서 설정을 좀 하면 Servlet 사용하기가 너무 쉬워서 Dynamic Web Project로 Servlet을 못 만드는 상황을 보게 되었습니다. 그래서 간단한 예제를 작성 해봤습니다.

 

 

 

1. Dynamic Web Project를 생성 해주세요. 상단 탭의 'File -> New -> Others' 

 

 

 

2. 프로젝트 이름 입력 및 런타임 서버를 설정 해주세요. 저는 Wildfly 를 사용 하겠습니다.

 

 

 

3 Servlet 클래스를 생성 합니다.상단 탭의 'File -> New -> Others' 

  그림3-2 처럼 정보를 입력한 후 그림3-3처럼 자동 생성될 메소드(doGet)를 선택 해주세요.

 선그림 3-1
그림 3-2
그림 3-3

 

 

4. 클래스를 생성하면 아래와 같이 자동으로 doGet 메소드가 생성됩니다.

package com.demo;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Hello
 */
@WebServlet("/Hello")
public class Hello extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Hello() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}
}

 

 

 

 

5. Wildfly 서버를 실행 시키고 http://localhost:8080/{Project name}/{WebServlet Mapping name}접속 하시면

그림 5-2처럼 메세지가 보여집니다.

그림 5-1

 

그림 5-2

Window환경에 PostgreSQL과 pgAdmin을 설치하고 pgAdmin 접근 까지의 예제입니다.

 

 

1. 아래 링크에 들어가 그림1-1의 버전 스펙 표를 참고하여 원하시는 버전을 선택 해주세요.

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

 

 

PostgreSQL Database Download

Please Note: EDB no longer provides Linux installers for PostgreSQL 11 and later versions, and users are encouraged to use the platform-native packages. Version 10.x and below will be supported until their end of life.

www.enterprisedb.com

 

그림 1-1

 

 

 

2. 설치 파일을 실행 시키시고 그림 2-3과 같이 패키지에 포함된 컴포넌트들을 선택 해주세요.

   저는 pgAdmin 까지 사용을 하기 위해 모두 선택 하고 진행 하겠습니다.

   그림 2-5는 비밀번호를 설정 하는 부분이고 mysql&mariadb 와는 다르게 super user가 root가 아니라

   postgres입니다.

   그림 2-6은 포트를 설정하는 부분인데 다른 DB와는 다르게 3306포트를 하용하지 않고 5432를 사용합니다.

   그림 2-7은 Locale을 설정 하는건데 서버 스펙에 따라 설정 해주세요. 저는 default를 선택 했습니다.

   

그림 2-1
그림 2-2
ㅐ킺그림 2-3
그림 2-4
그림 2-5
그림 2-6
그림 2-7

 

그림 2-8
postg그림 2-9
그림 2-10 

 

 

 

3. 설치가 완료되면 pgAdmin 4를 실행 하시거나 아래 링크로 접근 해주세요.

   로그인 화면에서 super user 계정명과 비밀번호를 입력 하시면 그림 3-2와 같이 생성된 DB를 확인 할 수 있습니다.

 

* http://127.0.0.1:50835/browser/

 

그림 3-1
그림 3-2

스프링 프로젝트 사용 중  Could not run phased build action using Gradle distribution 'https://services.gradle.org/distributions/gradle-6.3-bin.zip'  에러가 발생 했습니다.

해당 문제는 gradle 버전이 맞지 않아 생기는 문제이며 C:\Users\{username}\.gradle\wrapper\dists 경로에서

그림 1과 같이 사용하지 않는 버전을 삭제 해주시고, 그림 2와 같이 필요한 버전을 다시 한 번 설정 해주세요.

wrapper를 사용 하시면 첫 번째 방법만 사용 하시면 됩니다.

 

그림 1
그림 2

 

 

스프링 프로젝트를 생성하고 jsp 파일에 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 에러가 발생 하였습니다.

프로젝트 runtime을 위해 톰캣을 추가 해주고, Dynamic Web Module, Java, JS 의 버전을 같이 수정 해주세요.

 

* 프로젝트 우클릭 -> Properties -> Project Facets -> 아래 그림 2-1을 참고 해주세요

 

그림 2-1

Spring 프로젝트를 구동하기 위해 톰캣을 추가 하려 할 때 'The name is already in use. Specify a different name.'

에러가 발생 했습니다.

보통 서버를 추가 했다 삭제 했을때 'org.eclipse.wst.server.core' 파일에 반영이 제대로 되지 않았을 때 발생합니다.

 

{workspace}/.metadata/.plugins/org.eclipse.core.runtime/.settings 경로에 접근하여 'org.eclipse.wst.server.core'

파일을 삭제 하거나 아래처럼 삭제 되지 않은 서버를 지워주세요.

 

 

 

'Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다'

 

잘 돌아가던 서버가 수정도 안 했는데 404에러가 발생하면, 톰캣 서버 Web module 의 path를 수정 해주시면 됩니다.

* 현재 아래 그림의 수정이 완료된 상태입니다. 

아래 그림2-1 처럼 올려야 할 프로젝트를 선택 하고 edit를 눌러주세요. 그리고 필요한 path를 입력 하시면 됩니다.

Spring 프로젝트를 진행 중이시라면 ' / ' 로 하시면 됩니다.

 

ps. 그나저나 저 HTTP 에러 상태 페이지를 영어로 보여지게 할 수 없나요 ㅇ_ㅇ? 

VMware에 CentOS 7 을 설치하려고 합니다.

VMware의 설치 과정은 https://gabrielyj.tistory.com/195 일부를 참고 해주시면 됩니다.

 

 

1. CentOS 7 iso 파일을 다운 습니다.  다운로드 링크 -> https://www.centos.org/download/

 그림1-1 과 같은 버전 7 탭에서 필요하신 버전에 맞춰 선택 하세요. 저는 기본적인 x86_64를 선택 했습니다.

 그림1-2 와 같이 다운로드 호스트 서버를 선택 해주세요. 현재 저는 캄보디아에 거주 중이라 다른 국가에서 접속 하시는 분과 다를겁니다. 

 그림 1-3 필요한 ISO 파일을 다운 받으세요.

 

Download

As you download and use CentOS Linux, the CentOS Project invites you to be a part of the community as a contributor. There are many ways to contribute to the project, from documentation, QA, and testing to coding changes for SIGs, providing mirroring or ho

www.centos.org

그림 1-1
그림 1-2
그림 1-3

 

 

 

2. 준비된 VMware에서 Create a New Virtual Machine을 선택하세요.

 

 

 

3. 두 번째의 installer disc.. 을 사용해도 되나, CentOS의 설치가 정상적으로 되지 않는 현상이 많았다고 합니다. 

   설치 진행 중 선택을 하기 위해 세 번쨰의 I will install...을 선택하세요.

 

 

 

 

4. VM으로 설치될 운영체제의 이름과 경로를 설정하세요.

 

 

 

5.  디스크 용량을 할당해주시고 next 눌러주세요.

 

 

 

6. Customize 를 선택 하신 후 그림 6-2처럼 Memory는 2GB로, 그림 6-3처럼 Processor는 2개로,

   그림 6-4 처럼 준비된 CentOS 설치를 위한 이미지 파일을 지정 해주세요.

   최종적으로 그림 6-5처럼 설정 되었는지 확인 해주세요. (원하시는 스펙에 따라 저와 다를 수 있습니다.)

그림 6-1
그림 6-2
그림 6-3
그림 6-4
그림 6-5

 

 

 

7. Install CnentOS 7을 선택해주세요. 그러면 열심히 설치를 시작합니다.

 

 

 

8. 기본 설치 도중 세부 설정을 위한 GUI 화면이 표시됩니다. 날짜, 소프트웨어 선택, 네트워크를 설정 하세요.

   그림 8-1(언어 선택) 같이 원하시는 언어를 선택 하세요

   그림 8-2-1~2 에 표시된 내용들을 설정 해야 합니다.

   * 소프트웨어 선택은 필요로 하시는 옵션에 맞게 선택 하시면 됩니다. 콘솔 형태의 인터페이스가 익숙하지 않으신 분들은 GNOME 데스크탑을 선택 하세요.

   그림 8-3(네트워크 설정)

   * 날짜/시간을 선택하는 화면이 누락 되었네요..ㅠㅠ 

그림 8-1
그림 8-2-1
그림 8-2-2
그림 8-3

 

 

 

9. 설치가 진행 되는 동안 ROOT암호를 설정 해주시면 됩니다. 나중에 비밀번호 변경 과정이 귀찮으니 꼭 기억 하세요!

그림 9-1
그림 9-2

 

 

 

10. 설치가 완료되면 재부팅 메세지가 뜹니다. 재부팅을 하시고 위에 설정한 root 및 비밀번호를 입력하면 CentOS에

    접속 할 수 있습니다. 물론 root외의 사용자는 위의 설치 과정 도중 생성 할 수 있습니다.

+ Recent posts