계수 정렬 알고리즘 (C 언어 구현)

1400 단어 정렬 알고리즘
계수 정렬,  수치 범위 가 작은 것 에 적합 합 니 다.  즉, 배열 의 최대 치 를 최소 치 로 줄 이 고 얻 은 값 을 최소 화 하 는 것 이다.  이 동시에 배열 요소 가 비교적 많은 상황 에서 계수 로 정렬 하 는 효율 이 비교적 높 고 계수 정렬 알고리즘 은 기본 적 인 안정성 을 가진다.
계산 정렬 의 시간 복잡 도 는 O (n) 이 고 계산 정렬 은 0 에서 100 사이 의 숫자 를 정렬 하 는 가장 좋 은 알고리즘 입 니 다.
알고리즘 의 절 차 는 다음 과 같다.
      1. 정렬 할 배열 의 최대 와 최소 요 소 를 찾 습 니 다.
      2. 배열 의 모든 값 이 i 인 요소 가 나타 나 는 횟수 를 통계 하고 배열 C 의 i 항 에 저장 합 니 다.
      3. 모든 계수 에 누적 (C 의 첫 번 째 요소 부터 모든 항목 과 이전 항목 을 추가)
      4. 대상 배열 을 역방향 으로 채 우기: 각 요소 i 를 새 배열 의 C (i) 항목 에 두 고 하나의 요 소 를 넣 을 때마다 C (i) 를 1 로 줄인다.
다음은 C 언어 로 이 루어 진 코드 를 직접 붙 입 니 다.
#include 
#include 
#include 

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void print_arry(int *arr,int n)
{
	int i;
	for(i = 0; i0; i--)
	{
		sorted_arr[count_arr[arr[i-1]]-1] = arr[i-1];
		count_arr[arr[i-1]]--;	
	} 
	free(count_arr);
}
int main() {
	int n,i;
	printf ("         n="); 
	scanf ("%d", &n); 
	
	int *arr = (int *)malloc(sizeof(int) * n);
	int *sorted_arr = (int *)malloc(sizeof(int) * n);
	
	srand (time (0));
	for (i = 0; i

좋은 웹페이지 즐겨찾기