정보보안 프로젝트 (Sort Algorithm) 학 부 : 컴퓨터 정보공학부, 네트워크 정보 공학부

Slides:



Advertisements
Similar presentations
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Advertisements

Big Data & Hadoop. 1. Data Type by Sectors Expected Value using Big Data.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
알고리즘 기본 개념 정렬 알고리즘 탐색 알고리즘 알고리즘 복잡도.
이진 나무 구조 강윤섭 2008년 5월 23일.
2.6 탐색(Search) 1. 순차검색 (Sequential Search, Linear Search)
(Program = Algorithm + Data Structure)
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
연결리스트(linked list).
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
Chapter 10. 정렬 Chapter 10-1: 단순한 정렬 알고리즘.
CHAP 1:자료구조와 알고리즘 순천향대학교 컴퓨터공학과 하 상 호.
자료구조론 11장 정렬(sort).
Chapter 02 순환 (Recursion).
빠른정렬(Quick Sort) – 개요 (1/2)
Chapter 9 정렬(sorting) SANGJI University Kwangman KO
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express Slide 1 (of 32)
6장. printf와 scanf 함수에 대한 고찰
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
11장. 1차원 배열.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
탐색 (1) 용어 정리 순차 탐색 (Sequential Search) 리스트 : 하나 이상의 필드로 된 레코드의 집합
CHAP 9: 정렬 (part 2) 순천향대학교 컴퓨터학부 하 상 호.
정렬과 합병.
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 44).
제4장 제어 시스템의 성능.
11 정렬.
자바 5.0 프로그래밍.
프로그래밍 개요
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
CHAP 9: 정렬 순천향대학교 컴퓨터학부 하 상 호.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
Tree & Heap SANGJI University Kwangman Ko
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Choi Seong Yun 컴퓨터 프로그래밍 기초 #06 : 반복문 Choi Seong Yun
병합 정렬 병합 정렬2 석차구하기 가까운 수 구하기 이진검색
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
VHDL를 이용한 DES 설계 정보통신컴퓨터공학부 5조 김인옥, 백미숙
객체기반 SW설계 팀활동지 4.
알고리즘 알고리즘이란 무엇인가?.
데이터 동적 할당 Collection class.
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
단축키 기능 1. 단축키 기능 설명 Alt + R 조회 S 저장 I 삽입 A 추가 D 삭제 P 출력 Q 닫기
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
5장. 선택 알고리즘.
빠른정렬(Quick Sort) – 개요 (1/2)
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
Chapter 10 데이터 검색1.
CHAP 9: 정렬 순천향대학교 컴퓨터학부 하 상 호.
5.2.3 교환방식의 비교 학습내용 교환방식의 비교.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
7장 연습 문제 풀이 학번 : 이름 :조 재한.
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
제 4 장 Record.
RPTree 코드분석 (월) Dblab 김태훈.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
 6장. SQL 쿼리.
빠른정렬(Quick Sort) – 개요 (1/2)
C++ Espresso 제15장 STL 알고리즘.
Presentation transcript:

정보보안 프로젝트 (Sort Algorithm) 학 부 : 컴퓨터 정보공학부, 네트워크 정보 공학부 학 과 : 컴퓨터 전공, 인터넷 정보전공 이 름 : 김명수(98211013), 김명주 (99701126) 날 짜 : 2004. 4. 29(목요일)

Contents  Algorithm Definition  Sort Algorithm Description  Insert sort - Advantage and weak point / Source  Bubble sort  Select sort  Quick sort  Conclusion

Sort Algorithm  Sort algorithm(정렬 알고리즘)  정 의  정 의 - 기억 장소에 저장된 자료를 키(Key)값에 따라서 오름차순(Ascending), 내림차순(Descending)으로 순서 배열하는 것  정렬 알고리즘 선택에 미치는 요인 - 컴퓨터 시스템의 특성 - 정렬할 자료의 량 - 자료의 초기 배열 상태 - 키 비교 횟수 및 자료 교환 횟수 - 정렬할 기억 공간의 크기

BUBBLE SORT  BUBBLE SORT(버블정렬)  정 의 : 주어진 파일에서 서로 인접한 레코드 두 키갑을 비교하여 그 크기에 따라 레코드의 위치를 서로 교환함  장 점 - 알고리즘이 간단하고 플래그를 사용하면 효율적인 수행이 가능 ※플래그 : 이미 정렬된 상태를 파악하기 위해 레코드 위치 교환의                               발생여부를 나타내는 것 - 양이 작은 데이터를 정렬할 때는 빠르며, 사람이 구현하기가 비교적 쉽다  단 점 - 큰 배열을 정렬할 때 쓰기에는 너무 계산량이 많다

BUBBLE SORT  Bubble sort description 20 8 52 35 23 69 42 8 20 52 35 가장 큰 수가 맨 마지막에 정렬되며 다시 앞과정을 마지막 정렬 과정을 제외 하고 반복하여 정렬 8 20 35 23 52 69 42 8 20 35 23 52 69 42 8 20 35 23 52 42 69 8 20 35 23 52 42 69

BUBBLE SORT  Bubble sort source double bubble_sort(int arrayB[], int max){ double start, end; double total; int i=0; int j=max-1; int temp=0; //임시 저장 장소 start = clock(); //마지막에서 부터 내려간다. for(j;j>0;j--){//i부터 j까지 루프 반복 for(i=0;i<j;i++){ //arrayB[i] > arrayB[i+1] 비교 if(arrayB[i] > arrayB[i+1]){ // 배렬 위치 교환 temp = arrayB[i]; arrayB[i] = arrayB[i+1]; arrayB[i+1] = temp; } end = clock(); total=((double)(end-start)/CLOCKS_PER_SEC); cout << "버블 소팅 시간 : "<< total << "초" << endl; return total;

BUBBLE SORT  Bubble sort time check

INSERT SORT  INSERT SORT(삽입정렬)  정 의 : 한 개의 데이터부터 시작해서 차례로 삽입하고, 다음코드가 삽입될 때 마다 이미 들어 있는 데이터와 비교하여 만족하지 못하면 뒤로 이동 후 삽입하는 정렬 방법이다  장 점 - 인플레이스 정렬(내부정렬)이라는 장점이 있습니다. 즉, 삽입정렬의 최상의 성능으로 작은 자료집합에 대한 오름차순 정렬이라는 특징입니다. - 양이 작은 데이터를 정렬할 때는 버블정렬보다는 조금 빠르며, 사람이 구현하기가 비교적 쉽다  단 점 - 퀵 정렬에 비해 느리면서 뚜렷한 장점이 없다.

INSERT SORT  Insert sort description 39 21 2 5 15 42 21 39 2 5 15 42

INSERT SORT  Insert sort source double insert_sort (int arrayI[], int max){ double start, end; double total; int i, j, k; //i, j, k 선언 start = clock(); for (i=1; i<max; i++) { //i번째 값을 k에 저장 k = arrayI[i]; for (j=i-1; j>=0 && k<arrayI[j]; j--) arrayI[j+1] = arrayI[j]; // k값을 arrayI[j+1] 저장 arrayI[j+1] = k; } end = clock(); total=((double)(end-start)/CLOCKS_PER_SEC); cout << "삽입 소팅 시간 : "<< total << "초" << endl; return total;

INSERT SORT  Insert sort time check

SELECTION SORT  SELECTION SORT(선택정렬)  정 의 : 첫 번째 데이터와 나머지 모든 데이터를 비교하여 위치 교환을 한 후, 다시 두 번째 데이터와 나머지 모든 데이터를 비교하여 위치 교환을 반복하는 방법  장 점 - 버블 정렬 보다 레코드 교환 횟수가 적다 - 큰 레코드와 작은키를 갖는 데이터 정렬에 적합  단 점 - 다중키 정렬시 이전의 정렬 내용이 유지되지 않아 안정성이 없음

SELECTION SORT  Select sort description 23 11 55 38 25 85 48 11 23 55

SELECTION SORT  Selection sort source double select_sort(int arrayS[], int max){ double start, end; double total; int i=0,j=0; int tempL=0; //작은값의 위치 int temp=0; start = clock(); for(j=0;j<max;j++){ // 시작 값과 위치를 temp에 저장 tempL = j; for(i=j+1;i<max;i++){ // 작은 값을 찾는 if문 if(arrayS[tempL] > arrayS[i]){ tempL = i; } temp = arrayS[tempL]; // 작은 값은 차례대로 저장 arrayS[tempL] = arrayS[j]; arrayS[j] = temp; end = clock(); total=((double)(end-start)/CLOCKS_PER_SEC); cout << "선택 정렬 시간 : "<< total << "초" <<endl; return total;

SELECTION SORT  Selection sort time check

QUICK SORT  QUICK SORT(퀵정렬)  정 의 : 제어키를 이용하는 정렬 방법으로 제어키를 중심으로 제어키보다 큰 데이터는 제어키의 오른쪽에, 제어키보다 작은 데이터는 제어키의 왼쪽으로 이동하는 방법  장 점 - 정렬 방법 중 가장 빠른 방법  단 점 - 제어키가 중간값이 아니거나 데이터들이 이미 정렬된 경우 수행 속도가 대단히 느려진다

QUICK SORT  Quick sort description 17 11 45 38 12 26 17 11 45 12 38

QUICK SORT  Quick sort source void quick_sort(int a[], int left, int right){ int i, j, k, temp; /*k는 기준키*/ if (left < right) { i = left; j = right + 1; k = a[left]; do { do i++; while (a[i] < k); do j--; while (a[j] > k); if (i < j) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } while (i < j); /*i과j가 엇갈린 부분에서 기준키와 작은 값(a[j])을 교환*/ temp = a[left]; a[left] = a[j]; a[j] = temp; /*좌측 리스트에 대해 재귀호출*/ quick_sort (a, left, j-1); /*우측 리스트에 대해 재귀호출*/ quick_sort (a, j+1, right);

QUICK SORT  Quick sort time check

ALL SORT TIME CHECK  All sort time check

CONCLUSION  내부정렬 알고리즘 비교 ※어떤 문제 해결에 대한 방법에는 많은 알고리즘이 있다. 이 알고리즘을 종 류 방 식 시간 복잡도 평균복잡도 최악의 경우 복잡도 Selection sort 교 환 O(n ) Bubble sort Insert sort 삽 입 Quick sort O(nlog n) 2 2 2 2 2 2 2 ※어떤 문제 해결에 대한 방법에는 많은 알고리즘이 있다. 이 알고리즘을 좋고 나쁨을 평가하는 척도로 복잡도라는 개념을 사용하며 표기법으로는 O표기법을 사용한다. 알고리즘의 기본이 되는 정렬 알고리즘에는 삽입정렬, 버블정럴, 퀵정렬등 다양한 알고리즘이 있으며 이 알고리즘은 각각의 경우에 따라 최상의 알고리즘이 될 수도 있고 최악의 알고리즘이 될 수 도 있다. 따라서 상황에 맞는 알고리즘을 선택해야 한다.