1 / 6

DA :: 퀵 정렬

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

senwe
Download Presentation

DA :: 퀵 정렬

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

  5. •최악의 경우(서브파일이 하나만 존재) => 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); //오른쪽 서브파일에 대해 반복 } }

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

More Related