C语言程序设计数组问题

按下述排序方法编程实现对一维数组中n个元素的值从大到小排序。并将原数组及排序之后的数组输出到文件中,
排序方法:先将a[0]~a[n-1]中的最大值和最小值分别交换到a[0]和a[n-1]中,再将a[1]~a[n-2]中的最大值和最小值分别交换到a[1]和a[n-2]中,……,其他依此类推。

我假设你的一维数组是double型的,为double a[n];
步骤:
1.定义两个子函数,分别求数组中的最大值及最小值
double myMax(double* input,int n_Ele,int ini_idx,int* index)
double myMin(double* input, int n_Ele,int ini_idx,int* index)
实现如下:
double myMax(double* input, int n_Ele,int ini_idx,int* index){
double mx = input[0];
*index = 0;

for(int i=1;i<n_Ele,i++){

if mx<=input[i]
{

mx = input[i];

*index = i;

}

}

*index = *index + ini_idx;

return mx;

}

double myMin(double* input, int n_Ele,int ini_idx,int* index){
double mn = input[0];
*index = 0;
for(int i=1;i<n_Ele,i++){

if mn>=input[i]

{

mn = input[i];

*index = i;

}

}

*index = *index + ini_idx;
return mn;
}

2. main函数部分,假设数组长度为n,则
double tmp_mx(0),tmp_mn(0),tmp(0);
int count = n;
int idx_mx(0),idx_mn(0);
for(int i=0,i<(int)n/2;i++,count -= 2){
tmp_mx = myMax(&input[i],i,&idx_mx,count);

tmp_mn = myMin(&input[i],i,&idx_mn,count);

// 交换数据

tmp = a[i];
a[i] = tmp_mx;

a[idx_mx] = tmp;

tmp = a[n-i];

a[n-i] = tmp_mn;

a[idx_mn] = tmp;

}

for循环终止,排序完成,你按照上述方法试试看。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-26
1,设置i,j分别为0,0。
2,设定条件i+j《N是进行3操作
3,求出ai=max ,aj=min。这一布和书上的一样。。
4,赋值追问

麻烦把程序写出来好吗?谢谢!

相似回答