我想到了选择性排序,但是调换后
1.最小的确实在最前面,但第一个数不在最小的数的原始位置
2.最大值不在最后面
#include
void sort(int *a)
{
int j,temp1,temp2;
for(j=1;j<10;j++)
{
if(a[0]>=a[j])
{
temp1=a[0];
a[0]=a[j];
a[j]=temp1;
}
}
for(int i=0;i<9;i++)
{
if(a[9]<=a[j])
{
temp2=a[9];
a[9]=a[j];
a[9]=temp2;
}
}
printf("调整后的数组为:\n");
for (int k=0;k<10;k++)
{
printf("%d ",a[k]);
}
return;
}
int main()
{
int arr[10],*p;
printf("请输入十个数:\n");
for(int i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
p=arr;
sort(p);
return 0;
}
修改如下,供参考:
#include <stdio.h>
void sort(int* a,int n)
{
int i, temp, max_i = 0, min_i = 0;
for (i = 0; i < n; i++)//查找最大最小值位置
{
if (a[i] > a[max_i])
max_i = i;
if (a[i] < a[min_i])
min_i = i;
}
temp = a[0]; //第一个数与最小值兑换
a[0] = a[min_i];
a[min_i] = temp;
if (max_i == 0)
max_i = min_i; //如果最大值在第一个位置,则现在已经移动到 a[min_i]位置了
temp = a[n - 1]; //最大值与最后一个值兑换
a[n - 1] = a[max_i];
a[max_i] = temp;
printf("调整后的数组为:\n");
for (i = 0; i < n; i++)
printf("%d ", a[i]);
return;
}
int main()
{
int arr[10], * p;
printf("请输入十个数:\n");
for (int i = 0; i < 10; i++)
scanf("%d", &arr[i]);
p = arr;
sort(p, 10);
return 0;
}
定义变量max和min来记录最大最小数就行,之后和第一和最后的交换就可以
你要先定义max_idx和min_idx来存最大值最小值的位置,一开始让它们都是0
然后循环里判断a[i]和a[max_idx]的大小,如果a[i]更大,就max_idx=i
当你循环完毕之后,才进行交换
不要没循环完就着急交换,没循环完你怎么知道那个是最大值呢