//2.编写一个算法实现找出n个整数类型数据的顺序表中的最大数和最小数,然后将最大数放到最小数后面。如:原顺序表为:12,6,4,20,14,7,9,36,10,15,调整后顺序表为:12,6,4,36,20,14,7,9, 10,15。
#include<stdio.h>
#include <stdlib.h>
#define Size 10
typedef struct number{
int * head;//声明了一个名为head的长度不确定的数组,也叫“动态数组”
int length;//记录当前顺序表的长度
int size;//记录顺序表分配的存储容量
}num;
num initNumber(){ //初始化
num t;
t.head=(int*)malloc(Size*sizeof(int));
if (!t.head)
{
printf("初始化失败");
exit(0);
}
t.length=0;
t.size=Size;
return t;
}
num fun(num num1){
int i,j=0;
int k=0;
int min=num1.head[0];
int max=num1.head[0];
num num2=initNumber();
for(i=0;i<Size;i++){ //将num1中的值赋值给num2
num2.head[i]=num1.head[i];
}
i=0;
while(i<num1.length){
if(min>=num1.head[i]){ //寻找最小值和位置
min=num1.head[i];
k=i;
printf("%d,%d ",i,k);
i++;
}
else
i++;
}
printf("%d,%d",min,k);//????
for(i=0;i<num1.length;i++){ //寻找最大值和位置
if(max<=num1.head[i]){
max=num1.head[i];
j=i;
}
}
if(j>k){ //最大值在最小值前
for(i=j;i<Size;i++){
if(i==k){
num1.head[i]=max;
}
else
num1.head[i]=num1.head[i+1];
}
}
else{ //最小值在最大值前面
num1.head[k+1]=max;
for(i=k+2;i<Size;i++){
if(i==j)
num1.head[i]=num2.head[i+1];
else{
num1.head[i]=num2.head[i-1];
}
}
}
return num1;
}
void display(num t){
int i;
for (i=0;i<t.length;i++) {
printf("%d ",t.head[i]);
}
printf("\n");
}
int main(){
int i;
num t=initNumber();
for(i=1;i<=Size;i++) {
scanf("%d",&t.head[i-1]);
t.length++;
}
t=fun(t);
display(t);
return 0;
}
结果:
k变成了212