본문 바로가기
컴퓨터 관련

퀵 정렬 알고리즘

by _BlankSpace 2016. 7. 22.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void q_sort(dataArr data[], int left, int right){
     int pivot, l_hold, r_hold;
     char pivot_name[101];
     l_hold = left;
     r_hold = right;
     pivot = data[left].age;
     strcpy(pivot_name, data[left].name);
     while(left<right){
         while((data[right].age>=pivot) && (left < right)){
              right--;
          }
          if(left != right){
           data[left].age=data[right].age;
           strcpy(data[left].name, data[right].name);
          }
   
          while((data[left].age <= pivot) && (left < right)){
               left++;
          }
          if(left != right){
           data[right].age=data[left].age;
           strcpy(data[right].name, data[left].name);
           right--;
          }
     }
     
    data[left].age = pivot;
     strcpy(data[left].name, pivot_name);
     pivot = left;
    left = l_hold;
    right = r_hold;
 
    if(left < pivot)
         q_sort(data, left, pivot-1);
     if(right > pivot)
          q_sort(data, pivot+1, right);
}
 
cs







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 재귀함수
void QuickSort(int *arr, int n)
{
    int left, right;
    int pv, t;
 
    // 갯수가 2 이상이면
    if(n > 1){
 
    // 피벗 결정
    pv=arr[n-1];
 
    // 좌우 인덱스 설정 및 비교, 교환
    left=0; right=n-2;
    while(1){
        while(arr[left] < pv) ++left;
        while(right && arr[right] > pv) --right; // 시작 인덱스보다 작거나 같으면 값 조사 필요 없다.
        if(left >= right) break;
        t=arr[left]; arr[left]=arr[right]; arr[right]=t;
        ++left; --right;
    }
 
      // 피벗 자리와 left 자리 교환
      arr[n-1]=arr[left]; arr[left]=pv;
 
      // 좌우측 재귀호출
      QuickSort(arr, left);    // (left-1)-0+1
      QuickSort(arr+left+1, n-left-1); // (n-1)-(left+1)+1
     }
}
cs


'컴퓨터 관련' 카테고리의 다른 글

00. Git의 기본.  (0) 2017.03.09
수 분할 알고리즘  (2) 2016.07.26
1.5. 금액 맞추기 알고리즘  (0) 2016.07.12
파워쉘(PowerShell) 정리 [간단하게]  (0) 2016.07.10
쉘 스크립트(Shell Script) 정리 (1)  (0) 2016.07.10

댓글