如何交换同一个数组中的两个最大元素?
how to swap two max elements in the same array?
我在考虑如何交换给定数组中的这两个元素,例如,如果我在一个数组中找到两个最大值并且我想交换它们,我该如何在不使用另一个数组的情况下做到这一点?
#include <stdio.h>
int main()
{
int n,i;
int arr[100];
scanf("%d",&n);
for(i = 0;i < n;i++){
scanf("%d",&arr[i]);
}
//1 2 3 4 5
for example this array should be 1 2 3 5 4
int max1 = arr[0],max2 = arr[0];
for(i = 0;i < n;i++){
if(max1 < arr[i]){
max2 = max1;
max1 = arr[i];
}
else if(max2 < arr[i]){
max2 = arr[i];
}
}
printf("%d %d",max1,max2);
return 0;
}
与其将 max1 和 max2 定义为数组值,不如将它们定义为索引。例如
int max1 = 0, max2 = 0;
for ( i = 1;i < n; i++ ){
if( arr[max1] < arr[i] ){
max2 = max1;
max1 = i;
}
else if( arr[max2] < arr[i]){
max2 = i;
}
}
if ( max1 != max2 && arr[max1] != arr[max2] )
{
int tmp = arr[max1];
arr[max1] = arr[max2];
arr[max2] = tmp;
}
printf("%d %d",arr[max1],arr[max2]);
或者你可以无条件交换元素。
int tmp = arr[max1];
arr[max1] = arr[max2];
arr[max2] = tmp;
我在考虑如何交换给定数组中的这两个元素,例如,如果我在一个数组中找到两个最大值并且我想交换它们,我该如何在不使用另一个数组的情况下做到这一点?
#include <stdio.h>
int main()
{
int n,i;
int arr[100];
scanf("%d",&n);
for(i = 0;i < n;i++){
scanf("%d",&arr[i]);
}
//1 2 3 4 5
for example this array should be 1 2 3 5 4
int max1 = arr[0],max2 = arr[0];
for(i = 0;i < n;i++){
if(max1 < arr[i]){
max2 = max1;
max1 = arr[i];
}
else if(max2 < arr[i]){
max2 = arr[i];
}
}
printf("%d %d",max1,max2);
return 0;
}
与其将 max1 和 max2 定义为数组值,不如将它们定义为索引。例如
int max1 = 0, max2 = 0;
for ( i = 1;i < n; i++ ){
if( arr[max1] < arr[i] ){
max2 = max1;
max1 = i;
}
else if( arr[max2] < arr[i]){
max2 = i;
}
}
if ( max1 != max2 && arr[max1] != arr[max2] )
{
int tmp = arr[max1];
arr[max1] = arr[max2];
arr[max2] = tmp;
}
printf("%d %d",arr[max1],arr[max2]);
或者你可以无条件交换元素。
int tmp = arr[max1];
arr[max1] = arr[max2];
arr[max2] = tmp;