번개애비의 라이프스톼일
힙정렬(Heap sort)과 계수정렬(Counting sort)을 C로 짜보기 본문
소스코드 :
#include <stdio.h>
#include <iostream>
using namespace std;
void counting_sort(int A[], int k, int n){
int i, j;
int B[15], C[100];
for (i = 0; i <= k; i++)
C[i] = 0;
for (j = 1; j <= n; j++)
C[A[j]] = C[A[j]] + 1;
for (i = 1; i <= k; i++)
C[i] = C[i] + C[i-1];
for (j = n; j >= 1; j--)
{
B[C[A[j]]] = A[j];
C[A[j]] = C[A[j]] - 1;
}
printf("계수정렬 결과 : ");
for (i = 1; i <= n; i++)
printf("%d ", B[i]);
}
void heapify(int A[], int n, int i){
int largest = i;
int l = 2*i + 1;
int r = 2*i + 2;
if (l < n && A[l] > A[largest])
largest = l;
if (r < n && A[r] > A[largest])
largest = r;
if (largest != i){
swap(A[i], A[largest]);
heapify(A, n, largest);
}
}
void heap_sort(int A[], int n){
for (int i = n / 2 - 1; i >= 0; i--)
heapify(A, n, i);
for (int i=n-1; i>=0; i--){
swap(A[0], A[i]);
heapify(A, i, 0);
}
printf("힙정렬 결과 : ");
for (int i = 1; i <= n; i++)
printf("%d ", A[i]);
}
int main(){
int n, k = 0, A[15], i;
printf("입력할 값들의 갯수를 입력해주세요 : ");
scanf("%d", &n);
for (i = 1; i <= n; i++){
printf("\n%d번째의 입력값을 입력해주세요 : ",i);
scanf("%d", &A[i]);
if (A[i] > k){
k = A[i];
}
}
counting_sort(A, k, n);
printf("\n");
heap_sort(A, n);
printf("\n");
return 0;
}
실행결과 :
'IT' 카테고리의 다른 글
스마트폰 배경이미지 (백터) (0) | 2019.05.08 |
---|---|
Windows Server 2016 인텔 NUC - NUC7i7BNH의 네트워크 드라이버 잡기 (0) | 2019.05.07 |
퀵정렬과 삽입정렬을 이용하여 Sorting하기 (C언어) (0) | 2017.03.30 |
C언어 - 버블정렬을 이용하여 내림차순으로 정렬하기 (0) | 2017.03.22 |
문자의 짝수와 홀수를 X로 치환하는 함수 (C) (0) | 2016.12.07 |