先有思路后有代码:
思路:在主函数中定义一个数组用来存放10个整数,定义int * 型指针变量p指向a[0]。定义函数sort使数组a中的元素按由大到小排序。在主函数中调用sort函数,用指针变量p作实参,sort函数的形参用数组名,用选择排序法进行排序。
撸码:
#include "stdafx.h"
#include "stdlib.h"
int main()
{
void sort(int x[], int n);
int i, *p, a[10];
p = a;
printf("Please enter 10 integer number:");
for ( i = 0; i < 10; i++)
{
scanf(" %d ",p++);
}
p = a;
sort(p, 10);
for (p = a, i = 0; i < 10; i++)
{
printf("%d", *p);
p++;
}
printf("\n");
system("pause");
return 0;
}
//选择排序法
void sort(int x[], int n) {
int i, j, k, t;
for ( i = 0; i < n-1; i++)
{
k = i;
for ( j = i+1; j < n; j++)
{
if (x[j]>x[k])
{
k = j;//记录下最大值的位置
}
}
if (k!=i)
{
t = x[i];
x[i] = x[k];
x[k] = t;
}
}
}
运行结果:
当然排序函数也可以改为指针形式,这时sort函数声明要改为:
sort(int *x,int n)
其他不改,程序运行结果不变。
可以看到,即使在函数sort中将x定义为指针变量,在函数中仍可用x[i]和x[j]这样的形式表示数组元素,它就是x+i和x+j所指的数组元素。
上面的sort等价于:
void sort(int *x, int n) {
int i, j, k, t;
for ( i = 0; i < n-1; i++)
{
k = i;
for ( j = i+1; j < n; j++)
{
if (*(x+j)>*(x+k))
{
k = j;
}
}
if (k != i) {
t = *(x + i);
*(x + i) = *(x + k);
*(x + k) = t;
}
}
}