2019년 4월 13일 토요일

# 퀵소트 및 선택정렬 소스코드

아래는 위키백과 에서 소스 긁어왔고, 다시한번 보면서 되새겨보자. http://ko.wikipedia.org/wiki/%ED%80%B5_%EC%A0%95%EB%A0%AC http://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC
 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
39
40
41
42
43
44
void quickSort(int numbers[], int array_size)
 {
   q_sort(numbers, 0, array_size - 1);
 }
 
 void q_sort(int numbers[], int left, int right)
 {
   if(left == right) return;
   int pivot, l_hold, r_hold;
   l_hold = left;
   r_hold = right;
   pivot = numbers[left];
 
   while (left < right)
   {
     while ((numbers[right] >= pivot) && (left < right))
       right--;
 
     if (left != right)
     {
       numbers[left] = numbers[right];
       left++;
     }
 
     while ((numbers[left] <= pivot) && (left < right))
       left++;
 
     if (left != right)
     {
       numbers[right] = numbers[left];
       right--;
     }
   }
 
   numbers[left] = pivot;
   pivot = left;
   left = l_hold;
   right = r_hold;
 
   if (left < pivot)
     q_sort(numbers, left, pivot-1);
   if (right > pivot)
     q_sort(numbers, pivot+1, right);
 }
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
void selectionSort(int *list, const int n)
{
    int i, j, indexMin, temp;
 
    for (i = 0; i < n - 1; i++)
    {
        indexMin = i;
        for (j = i + 1; j < n; j++)
        {
            if (list[j] < list[indexMin])
            {
                indexMin = j;
            }
        }
        temp = list[indexMin];
        list[indexMin] = list[i];
        list[i] = temp;
    }
}
그리고 이거는 직접 만들어본 quickSort
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
void QuickSort(int arr[], int up, int down) {
 int pivot = arr[(up + down) / 2];
 int upPtr = up;
 int downPtr = down;

 while (upPtr <= downPtr) {
  while (arr[upPtr] < pivot) upPtr++;
  while (arr[downPtr] > pivot) downPtr--;
  if (upPtr <= downPtr) {
   int tmp = arr[upPtr];
   arr[upPtr] = arr[downPtr];
   arr[downPtr] = tmp;
   upPtr++;
   downPtr--;
  }
 }
 if (up < downPtr) QuickSort(arr, up, downPtr);
 if (upPtr < down) QuickSort(arr, upPtr, down);
}

댓글 없음:

댓글 쓰기