데이터 구조 - 알고리즘 (017) (n 개 수 를 어떻게 정렬 하 는 지, 시간 복잡 도 O (n), 공간 복잡 도 O (1) 를 요구 합 니 다.

1104 단어
[설명: 본 고 는 자기 귀납 적 정리 와 상호 교류 에 국한 되 며 오류 가 있 으 면 여러분 께 서 지적 해 주 십시오. 연락 메 일: [email protected]
제목:
n 개 수 를 어떻게 정렬 하 는 지, 시간 복잡 도 O (n), 공간 복잡 도 O (1) 를 요구 합 니 다.
제목 분석:
얼핏 보면 완성 할 수 없다.시간 복잡 도 는 n 이 고 모든 정렬 법 을 보면 이 단계 에 이 르 지 못 했다.
2. 유한 한 개수 배열 을 대상 으로 한다 면 표기 법 을 사용 하거나 hash 사상의 방법 이 라 고 할 수 있 으 며 큰 배열 hash [65536] 를 신청 할 수 있 습 니 다.
그리고 해당 위 치 를 표시 하고 중복 되 는 숫자 는 중첩 합 니 다.
예 를 들 면:
0----->hash[0]++;
5----->hash[5]++;
100--->hash[100]++;
알고리즘 구현:
#include <stdio.h>

static int hash[65536] = {0};
void hash_sort(int *array, int size)
{
    int i=0;
    for(; i<size; i++)
        hash[array[i]]++;
}

int main(int argc, char *argv[])
{
    int a[] = {1, 4, 1, 2, 5, 13, 4, 6, 8, 1000, 999, 9,};

    //sort
    int size = sizeof(a)/sizeof(int);
    hash_sort(&a, size);

    //print the array
    int i = 0;
    for(; i<65536 && size--; i++)
    {
        while(hash[i] != 0)
        {
            printf(" %d", i);
            hash[i]--;
        }
    }
    return 0;
}

좋은 웹페이지 즐겨찾기