7-12 정렬(25점)(힐 정렬)

5527 단어
작은 크기에서 큰 크기로 정렬된 결과를 출력하도록 N개의 정수(긴 크기 범위)를 지정합니다.
이 문제는 각종 서로 다른 정렬 알고리즘이 각종 데이터 상황에서의 표현을 시험하는 데 목적을 두고 있다.각 그룹의 테스트 데이터 특징은 다음과 같습니다.
 
  • 데이터 1: 원소 1개만 있음;   
  • 데이터 2:11개의 서로 다른 정수로 기본적인 정확성을 측정한다.   
  • 데이터 3:103개의 무작위 정수;   
  • 데이터 4:104개의 무작위 정수;   
  • 데이터 5:105개의 무작위 정수;   
  • 데이터 6:105개의 순서 정수;   
  • 데이터 7:105개의 역순 정수;   
  • 데이터 8:105개의 기본 질서정연한 정수;   
  • 데이터 9:105개의 무작위 정수로 숫자마다 1000을 넘지 않는다.입력 형식: 첫 번째 행은 양의 정수 N(≤)을 입력하고, 다음 행은 공백으로 구분된 N개의 정수(긴 정수 범위)를 입력합니다.출력 형식: 한 줄에서 작은 줄에서 큰 줄로 정렬된 결과를 출력합니다. 숫자는 한 칸으로 구분되며, 줄 끝에 여분의 칸이 있어서는 안 됩니다.샘플 입력:
    11
    4 981 10 -17 0 -20 29 50 8 43 -5
    
    샘플 출력:
    -20 -17 -5 0 4 8 10 29 43 50 981
  •  1 #include
     2 #include
     3 
     4 #define MAXN 100005
     5 #define INFINITY 65535
     6 
     7 int a[MAXN];
     8 int n;
     9 void ShellSort();
    10 
    11 int main()
    12 {
    13     int i;
    14 
    15     scanf("%d",&n);
    16     for( i=0; i){
    17         scanf("%d",&a[i]);
    18     }
    19     ShellSort();
    20     for( i=0; i){
    21         printf("%d",a[i]);
    22         if( i!=(n-1)){
    23             printf(" ");
    24         }
    25     }
    26     return 0;
    27 }
    28 
    29 void ShellSort()
    30 {
    31     int i,j;
    32     int temp;
    33     int increment;
    34 
    35     for( increment=n/2; increment>0; increment/=2){
    36         for( i=increment; i){
    37             temp = a[i];
    38             for( j=i-increment; j>=0 && tempincrement){
    39                 a[ j+increment ] = a[j];
    40             }
    41             a[ j+increment ] = temp;
    42         }
    43     }
    44 }

     
    전재 대상:https://www.cnblogs.com/yuxiaoba/p/8358213.html

    좋은 웹페이지 즐겨찾기