• 希尔排序

    希尔排序

    1. #include <stdio.h>
    2. #define MaxSize 100
    3. typedef int KeyType; /*关键字类型*/
    4. typedef char ElemType[10]; /*其他数据项类型*/
    5. typedef struct
    6. {
    7. KeyType key; /*关键字域*/
    8. ElemType data; /*其他数据域*/
    9. } LineList; /*线性表元素类型*/
    10. void ShellSort(LineList R[],int n)
    11. {
    12. int i,j,gap;
    13. LineList tmp;
    14. gap=n/2; /*增量置初值*/
    15. while (gap>0)
    16. {
    17. for (i=gap;i<n;i++) /*对所有相隔gap位置的所有元素组进行排序*/
    18. {
    19. tmp=R[i];
    20. j=i-gap;
    21. while (j>=0 && tmp.key<R[j].key)/*对相隔gap位置的元素组进行排序*/
    22. {
    23. R[j+gap]=R[j];
    24. j=j-gap; /*移到本组中的前一个元素*/
    25. }
    26. R[j+gap]=tmp;
    27. j=j-gap;
    28. }
    29. gap=gap/2; /*减小增量*/
    30. }
    31. }
    32. void main()
    33. {
    34. LineList R[MaxSize];
    35. KeyType a[]={75,87,68,92,88,61,77,96,80,72};
    36. int n=10,i;
    37. for (i=0;i<n;i++)
    38. R[i].key=a[i];
    39. printf("排序前:");
    40. for (i=0;i<n;i++)
    41. printf("%3d",R[i].key);
    42. printf("\n");
    43. ShellSort(R,n);
    44. printf("排序后:");
    45. for (i=0;i<n;i++)
    46. printf("%3d",R[i].key);
    47. printf("\n");
    48. }