数据结构:设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列

2025-05-20 05:23:11
推荐回答(2个)
回答1:

希尔排序:我建议你先百度一下“希尔排序”,百度百科中,希尔排序说的很详细

第一趟排序你先将4的倍数的数据都先取来进行直接插入排序

  Q, H, C, Y, P, A, M, S, R, D, F, X

  Q               P                R              ---这组直接插入排序:  P            Q             R

      H                A                D         ---这组直接插入排序:      A            D             H

           C               M                F     ---这组直接插入排序:          C            F             M

               Y                S                X---这组直接插入排序:              S            X             Y

所以第一趟结果PACSQDFXRHMY

快速排序,我建议也百度一下,上面有图有过程例子,提供一段C语言程序供参考。你可以调试跟踪一下。

#include 
void out(char a[], int n)
{
 int i;
 for(i=0;i {        
  printf("%c ",a[i]);   
 }    
}
void quicksort(char a[], int low, int high)
{
 if (low >= high) return;
 int first = low;
 int last = high;
 int key = a[first];
 while (first {
  while (first=key) --last;
  a[first] = a[last];
  while (first  a[last] = a[first];
 }
 a[first] = key;
 out(a,12);
 printf("\n"); 
 quicksort(a, low, first - 1);
 quicksort(a, first + 1, high);
}
void main()
{
 char a[12]={'Q','H', 'C', 'Y', 'P', 'A', 'M', 'S', 'R', 'D', 'F', 'X'};
 quicksort(a,0,11);
 printf("结果:\n");   
 out(a,12);
 scanf("%d",&a[1]);
}

输出结果

F H C D P A M Q R S Y X
A D C F P H M Q R S Y X
A D C F P H M Q R S Y X
A C D F P H M Q R S Y X
A C D F M H P Q R S Y X
A C D F H M P Q R S Y X
A C D F H M P Q R S Y X
A C D F H M P Q R S Y X
A C D F H M P Q R S X Y
结果:
A C D F H M P Q R S X Y

回答2:

Q, H, C, Y, P, A, M, S, R, D,F, X
Q, H, C, Y, P, A, M, S, R, D,F, X
F, Q, H, C, Y, P, A, M, S, R, D,X
D,F, Q, H, C, Y, P, A, M, S, R, X
D,F, Q, H, C, Y, P, A, M, S, R, X
D,F, Q, H, C, Y, P, A, M, S, R, X
M, D,F, Q, H, C, Y, P, A, S, R, X
A, M, D,F, Q, H, C, Y, P, S, R, X
P, A, M, D,F, Q, H, C, Y, S, R, X
P, A, M, D,F, Q, H, C, Y, S, R, X
C, P, A, M, D,F, Q, H, Y, S, R, X
H, C, P, A, M, D,F, Q, Y, S, R, X