C++将数组从小到大进行排序

发现

1.先放段简单代码

void swip(int data1, int data2)
{
 int temp;
 temp = data1;
 data1 = data2;
 data2 = temp;
}
int main()
{ 
 int a=3;int b=4;  
 swip(a,b); 
 cout<<a<<","<<b<<endl;
return 0;
}

是要交换一下两个数据的位置。那么我们看一下运行结果3,4并没有改变。
2.再放一段代码

void swip(int* data1, int* data2)
{
 int temp;
 temp = *data1;
 *data1 = *data2;
 *data2 = temp;
}

看一下运行结果,4,3实现了我们想要的结果。
为什么会这样呢?

思考

1.在第一段代码中,data1和data2是已经定义好的形参,a和b是实参,函数只是改变了内部形参,并未影响到函数外部的实参,所以在主函数中打印a和b并未发生变化。
2.为什么第二段代码就有了变化?因为第二段代码使用了指针变量,直接获取了实参的地址,已经定义好的实参是无法改变的,除非你重新赋值。但是实参的地址是可以挪动的。所以第二段代码就是挪了一下两个实参的位置,进而实现了目的。

应用

已知一个数组,将其按照从小到大进行排列。

// 对输入数组进行排序
void arange(int* arr, int num)
{
 for (int i = 0; i < num-1; i++)
 {
  if (arr[i] > arr[i + 1])
  {
   int temp;
   temp = arr[i]; arr[i] = arr[i + 1];
   arr[i + 1] = temp;
  }
 }
}
int main()
{
 int score[5] = { 80,75,90,74,60 };
 int num = 5;
 // 当在确定最大值后,将最大值置于最右侧,对剩下的进行再次排序。
 for (int j = num; j >=1; j--)
 {
  arange(score, num);
 }
 for (int i = 0; i < num; i++)
 {
  cout << score[i] << " ";
 }
 return 0;
}

结果

60 74 75 80 90
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐