希尔排序

  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. }