DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

데이터 완전삭제프로그램 Perfect Delete 사용설명서  주의 이 프로그램을 이용하여 삭제된 데이터는 어떠한 방법으 로도 복구가 불가능합니다. 그러므로 실제 데이터 삭제시 신중을 기하기 바랍니다.
출석수업 과제 – 총 5문제, 10월 25일 제출 정보통계학과 장영재 교수.
알고리즘 기본 개념 정렬 알고리즘 탐색 알고리즘 알고리즘 복잡도.
이진 나무 구조 강윤섭 2008년 5월 23일.
2.6 탐색(Search) 1. 순차검색 (Sequential Search, Linear Search)
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Excel 일차 강사 : 박영민.
Chapter 10. 정렬 Chapter 10-1: 단순한 정렬 알고리즘.
CHAP 9 : 정렬.
정보보안 프로젝트 (Sort Algorithm) 학 부 : 컴퓨터 정보공학부, 네트워크 정보 공학부
자료구조론 11장 정렬(sort).
빠른정렬(Quick Sort) – 개요 (1/2)
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
1. C++ 시작하기.
Heesang kim PL/SQL 3 Heesang kim.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express Slide 1 (of 32)
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
PySpark Review 박영택.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
탐색 (1) 용어 정리 순차 탐색 (Sequential Search) 리스트 : 하나 이상의 필드로 된 레코드의 집합
CHAP 9: 정렬 (part 2) 순천향대학교 컴퓨터학부 하 상 호.
정렬과 합병.
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 44).
6. 합병 정렬 합병 정렬 (Merge Sorting)
11 정렬.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
WIN95,98 보조프로그램 ‘그림판’을 이용한 포장지디자인.
Linux/UNIX Programming
CHAP 9: 정렬 순천향대학교 컴퓨터학부 하 상 호.
Lesson 4. 수식과 연산자.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
27장. 모듈화 프로그래밍.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
Linux/UNIX Programming
7장. 다양한 형태의 반복문. 7장. 다양한 형태의 반복문 7-1 반복문이란? 반복문의 기능 세 가지 형태의 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 7-1 반복문이란? 반복문의 기능 특정 영역을 특정 조건이 만족하는 동안에 반복.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Nessus 4 설치 정보보호응용 조용준.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
선택 정렬 #define SWAP(x, y, t) {(t) = (x); (x) = (y); (y) = (t);}
Hanoi Tower.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
빌드 성공.
Linux/UNIX Programming
Linux/UNIX Programming
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
정렬(Sorting)과 해싱(Hashing)
5장. 선택 알고리즘.
빠른정렬(Quick Sort) – 개요 (1/2)
7주차: Functions and Arrays
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
Chapter 10 데이터 검색1.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
CHAP 9: 정렬 순천향대학교 컴퓨터학부 하 상 호.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
구조체(struct)와 공용체(union)
7장 연습 문제 풀이 학번 : 이름 :조 재한.
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
RPTree 코드분석 (월) Dblab 김태훈.
빠른정렬(Quick Sort) – 개요 (1/2)
C++ Espresso 제15장 STL 알고리즘.
Linux/UNIX Programming
Presentation transcript:

DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다. 파일을 하나의 기준 값을 중심으로 두 개의 서브파일로 분할하여, 앞쪽의 파일 내의 모든 키는 뒤쪽의 파일 내의 어떤 키보다도 작도록 분할한다. 나누어진 서브파일에 대해서 동일한 방식의 분할을 서브파일의 크기가 1이 될 때까지 재귀적으로 수행하면 최종적으로 서브파일의 크기가 1이 되면 완전히 정렬된 상태의 파일이 구성된다.

2가지 파일 분할방식 0번째 키를 기준값으로 설정하는 방식 1번째 키부터 시작 2, 3번 방향으로 기준값보다 큰 키값을 만나면 그 키를 선택, n-1번째 키부터 시작 n-2, n-3번 방향으로 기준값보다 작은 키 값을 가진 키를 만나면 그 키를 선택하여 두 키 값을 교환한다. 선택되었던 두 키의 다음 위치에서부터 동일한 과정을 반복한다. 양쪽 방향에서 진행하는 순서가 교차하면 정지한다. 가장 나중에 선택한 기준 키 값보다 작은 키를 기준 키와 교환한다. 2. 기준 키 값을 파일내의 중간위치에 있는 키 값으로 설정하는 방식 기준 키 값의 앞에서 기준 키 값보다 큰 값을, 뒤에서 기준 키 값보다 작은 값을 선택하여 교환한다.

퀵 정렬은 하나의 파일을 두 개의 파일로 나누어질 때 두 서브 파일의 크기가 비슷하게 되면 비교의 횟수가 감소하게 된다 퀵 정렬은 하나의 파일을 두 개의 파일로 나누어질 때 두 서브 파일의 크기가 비슷하게 되면 비교의 횟수가 감소하게 된다. 그러나 두 서브파일의 크기의 차가 크거나 또는 아예 하나의 서브파일 밖에 만들어지지 않는 경우 수행시간이 길어진다. 예를 들어, 정렬하고자 하는 순서의 역순으로 데이터가 나열되어 있는 경우에는 서브파일이 항상 하나 밖에 생성되지 않는다.

퀵 정렬의 수행시간 • 평균 비교횟수가 nLog2n => O(nLog2n)

• 최악의 경우(서브파일이 하나만 존재) => O(n2) void quick_sort(int list[], int f, int n) {        //f는 시작위치, n은 끝 위치     int i, j, k, temp; void quick_sort(int list[], int f, int n);    void prnt(int list[]); if(f < n) {         i=f+1;         j=n;         k=list[f];                       //k는 기준값         if(i==j) {             if(list[j] < k) {                 temp=list[j];                 list[j]=k;                 list[f]=temp; }       } while(i < j) {             while((list[i] <= k) && (i<n))                 i++;             while(list[j] >= k && (j>f))                 j--;             if(i < j) {                  //기준값보다 큰, 작은 값을 교환                 temp=list[i];                 list[i]=list[j];                 list[j]=temp;             }         }         if(i > j) {             temp=list[f];                //기준값과 교환             list[f]=list[j];             list[j]=temp;         }         quick_sort(list, f, j-1);        //왼쪽 서브파일에 대해 반복         quick_sort(list, j+1, n);        //오른쪽 서브파일에 대해 반복     } }

• 최악의 경우(서브파일이 하나만 존재) => O(n2)