lse printf(" s2 not in S1 7.20使用数组指针实现间接选择排序 算法分析:选择排序的基本思想是,对有n个元素的数组a排序,使用n-1次循环,每 次循环选择下一个最大的元素a[k],并将它与其应在的正确位置上的元素交换位置。所以 第一次循环在所有的元素中选出最大的元素并与a[n-1]互换位置,第二次循环在剩余的未 排序序列a[0],a[1 [n-2]中选出最大的元素并与a[n-2]互换位置,余类推 所谓间接选择排序,就是在选择排序过程中,通过将数组下标排序,而不是通过移动数 组元素来实现数组有序。 #include <stdio. h> #define size 10 int main inta[SIZE]={70,35,52,25,59,60,88,01,66,21} int i, j, k, *temp, *p [SIZe] /*定义指针数组* printf(" Data items in orginal order: \n") for(i =0: i<SIZE; i++) printf(%4d", ali]) for(i =0: i<SIZE: i++) p[i]=&a[i] /*p[i]指向a[i]*/ for(i=1: i<SIZE: i++) /*开始排序* /*选择a[k]=max{a[0],a[1],…,a[SIZE-1]}* for (j=1: j<=SIZE-i: j++) f([j] >*plkl)k=j pk]= plsize-i] P[SIZE-i]= temp printf( " \n\nData items in ascending order: \n") for(i =0: i<SIZE: i++) printf("%4d" *p[il) rinf( "\n")5 else printf("S2 not in S1!"); } } 7.20 使用数组指针实现间接选择排序。 算法分析:选择排序的基本思想是,对有 n 个元素的数组 a 排序,使用 n-1 次循环,每 次循环选择下一个最大的元素 a[k],并将它与其应在的正确位置上的元素交换位置。所以 第一次循环在所有的元素中选出最大的元素并与 a[n-1]互换位置,第二次循环在剩余的未 排序序列 a[0],a[1],…,a[n-2]中选出最大的元素并与 a[n-2] 互换位置,余类推。 所谓间接选择排序,就是在选择排序过程中,通过将数组下标排序,而不是通过移动数 组元素来实现数组有序。 #include <stdio.h> #define SIZE 10 int main() { int a[SIZE] = {70,35,52,25,59,60,88,01,66,21}; int i, j, k, *temp, *p[SIZE]; /* 定义指针数组 */ printf("Data items in oraginal order:\n"); for(i = 0; i<SIZE; i++) printf("%4d",a[i]); for(i = 0; i<SIZE; i++) p[i] = &a[i]; /* p[i]指向 a[i] */ for(i = 1; i<SIZE; i++) /* 开始排序 */ { /* 选择 a[k] = max{a[0],a[1],…,a[SIZE-1]} */ k = 0; for(j = 1; j<=SIZE-i; j++) if(*p[j] > *p[k]) k = j; temp = p[k]; p[k] = p[SIZE-i]; p[SIZE-i] = temp; } printf("\n\nData items in ascending order:\n"); for(i = 0; i<SIZE; i++) printf("%4d",*p[i]); printf("\n"); }