#include <stdio.h>
#define n 10
int max(int a[],int b[],int );
int main() {
int a[n] = {0};
int b[n] = {0}; //标记数组
for(int i = 0; i < n; i++){ //输入
scanf("%d",&a[i]);
}
int *p[n];
for(int i = 0; i < n; i++) { //使指针指向对应的元素
p[i] = &a[i];
}
for(int i = 0; i < n; i++) { //每次指向当前剩余元素中的最大值;
int max_i = max(a,b,n);
p[i] = &a[max_i];
b[max_i] = 1; //最大值标记为 1
}
for(int i = 0; i < n; i++){ //输出
printf("%d ",*p[i]);
}
return 0;
}
int max( int a[], int b[], int len ){ //返回b数组中未被标记的最大值的下标
int max = -999999999,k = 0; //保证在 > -999999999 的范围内,所有数都可排序
for(int i = 0; i < len; i++){
if(b[i] == 0 && a[i] > max){ //有标记的数字不再作为最大值
max = a[i];
k = i;
}
}
return k;
}
利用指针对整型数组排序,不改变原数组
最新推荐文章于 2024-07-14 12:00:25 发布