전체 글
-
(삽입그룹) 삽입 정렬 / 셀 정렬@ 16. 1 ~ 17. 1/자료구조 2016. 11. 27. 18:10
삽입 정렬은 기존에 정렬된 부분 집합에 정렬할 자료의 위치를 찾아 삽입하는 정렬방식이다.데이터 그룹은 다음과 같다80, 50, 70, 10, 60, 20, 40, 30의 8개의 정수로 구성되어있다.삽입 정렬에 의해 오름차순으로 정렬이 된다면... 두번째 자료부터 전체 자료개수만큼 루프를 돌면서 삽입위치를 찾는데..먼저 첫번째 80의 위치에두번째 자료인 50의 삽입할 위치를 찾는것....일단 80보다는 작으니까..80앞에 50이 위치하게 된다.그러면 50, 80, 70, 10, 60, 20, 40, 30 이렇게 되고..다름 70을 50, 80의 그룹에 삽입될 위치를 찾고..50, 70, 80이 된다..반복하게 되는것...50, 70, 80, 10, 60, 20, 40, 30 상태에서...다음인 10을 50..
-
(선택그룹) 선택 정렬 / 버블 정렬 / 퀵 정렬@ 16. 1 ~ 17. 1/자료구조 2016. 11. 27. 17:11
선택 정렬은 정렬되지 않은 전체 자료 중에서 해당 위치에 맞는 자료를 선택하여 위치를 교환하는 정렬 방식이다.80, 50, 70, 10, 60, 20, 40, 30위의 데이터 그룹이 있을때 그리고 오름차순 정렬이라면, 첫 번째 위치는 키 값이 가장 작은 자료의 위치이다.이렇게 작동한다. 처음 인덱스에서 출발을 해서 자료의 전체 크기를 돌면서 가장 작은 자료를 찾아 첫번째 인덱스와 교환을 하고다시 두번째인덱스부터 출발해서 가장 작은 값을 찾으면 두번째 인덱스와 교환해서 넣고..반복하다가 위에 데이터 그룹을 기준으로 마지막 8번째라면 그건 그냥 가장 큰값이 될테니 추가적인 위치교환없이 정렬이 마무리 된다. C#using System;using System.Collections.Generic;using Sys..
-
정렬 알고리즘 정리(1)@ 16. 1 ~ 17. 1/자료구조 2016. 11. 27. 12:58
자료를 정렬하는데 사용하는 자료의 값을 키라고 한다. Key파일크기에 따라 정렬이 되면 파일크기가 키다.정렬의 효율성은 정렬 대상이 되는 자료가 비교연산과 자료 이동연산의 횟수에 의해 결정된다.(퀵 정렬은 O(nlogn)이다 ) 아래는 시간복잡도에 따른 성능 우선순위다. 알고리즘에 따라 비교 연산이 많이 수행되는 경우와 자료 이동의 연산이 많이 수행되는 경우로 나눌 수 있다. 정렬을 수행해야 하는 자료의 크기가 크다면 같은 횟수의 연산이라 하더라도 비교연산이 많은 알고리즘이 이동 연산이 많은 알고리즘보다 성능이 우수(자료크기가 큼, 비교연산 > 이동연산 이렇게 되는 알고리즘이 더 낫다, 왜냐면 자료의 크기가 클 경우 이동해야하는 데이터의 크기가 증가하기 때문)그리고 저장된 자료의 상태에 따라 평균 효율성..
-
nullable@ 16. 1 ~ 17. 1/C# 2016. 11. 19. 14:42
Nullable 타입의 박싱/언박싱 박싱과 언박싱에 대한 이야기를 나누어 보기 전에 null 값의 비교에 대해서 살펴보도록 하겠다. Nullable 타입의 비교는 HasValue 속성을 직접 이용할 수도 있고 == 연산자를 이용할 수도 있다. DateTime? birthday; If(birthday==null) If(birthday.HasValue) 그리고 Nullable 타입은 다음과 같이 값뿐만 아니라 null을 대입할 수 있다는 것을 볼 수 있다. DateTime? birthday; birthday = null; birthday = new DateTime(1938,03,21); 하지만 이 코드를 개념상으로 접근한다면 상당히 혼란스러운 부분일 수 있다. 그래서 내부적인 동작을 IL로 확인해 본 결과 ..
-
함수호출 과정@ 16. 1 ~ 17. 1/시스템 프로그래밍 2016. 11. 19. 12:42
스택세그먼트 : 프로그램에서 사용하기 편하도록 메모리를 몇 가지 용도로 나눈 것중 하나를 의미한다.프로그램 코드가 들어있는 코드 세그먼트, 전역변수를 저장하는 데이터 세그먼트, 등의 일부임스택프레임 : 함수호출할때 복귀주소나 인자 같은걸 특정 절대 주소로 사용하면 중첩호출이 불가능그래서 호출할때마다 새로운 스택프레임을 구성한다. C에서의 함수라는 건 일반적으로 프로시저 및 함수라고 부르는 두가지 개념을 모두 포함한것.자주 쓰이는 기능을 프로시저라는 별도의 코드로 작성해 놓고 필요한 곳에서 프로시저를 부르는것..C에서는 별도로 두지 않고 함수의 리턴값이 없는 void를 허용함으로서 대신함...예를 들어 이런게 없으면 매번 printf 호출할때마다 계속 똑같이 써야한다..그 내용전부를..그런데 엄연히 함수와..
-
가비지 컬렉터 가비지 컬렉션@ 16. 1 ~ 17. 1/C# 2016. 11. 19. 09:39
* 객체 생존 기간객체는 new 연산자에 의해 메모리를 할당 하고 생성자에 의해 메모리에 있는 객체가 초기화 된다.반대로 소멸되는 경우에는 먼저 Finalize 메소드를 이용하여 메모리를 초기화 되지 않은 상태로 돌린다. 다음으로 이메모리 공간을 Heap에 반환하는 것이다. 그러므로 객체의 존속기는 new를 이용하여 메모리를 할당받는 순간부터 메모리를 Heap에 반환 할 때 까지이다. * GC(Garbage Collector)C#의 경우 기존의 C/C++ 처럼(new, delete) 프로그래머가 메모리 관리를 하지 않아도 된다. CLR에서 자동으로 알아서 소멸 시켜 준다. 또한 C#의 경우 명시적으로 코드상에서 객체를 소멸 할 수 없는 대신 Garbage Collector라는 것을 지원 해 준다. Gar..
-
C#AVL 트리@ 16. 1 ~ 17. 1/C# 2016. 11. 18. 23:11
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Collections.Concurrent; namespace Console1{ public class AvlNode { public int m_iData; public AvlNode m_Left_Child; public AvlNode m_Right_Child; public AvlNode(int iData) { m_iData = iData; } } public class AvlTree { private ..