swap()函数应用

编写swap)函数,实现将 main()函数中两个长度 样的整型数组a和b中对应元素相互交换。

如果是直接将数组a和数组b的每一个元素交换,可以向swap()函数传入数组a和数组b的地址,以及他们的长度,再在函数中交换它们对应元素的值即可。

代码如下:


#include <stdio.h>


void swap(int * a,int * b,int len){
    
    // 遍历数组a和b的每一个下标
    // 然后交换它们 对应的元素 
    for(int i=0;i<len;i++){
        int temp = a[i];
        a[i]=b[i];
        b[i]=temp;
    }
    
} 


int main(void){
    
    // 测试swap()函数 
    int a[5]={1,2,3,4,5};
    int b[5]={6,7,8,9,10};
    
    printf("交换数组前:\n");
    printf("数组a里的元素为:\n"); 
    for(int i=0;i<5;i++){
        printf("%d ",a[i]); 
    }
    
    printf("\n\n数组b里的元素为:\n"); 
    for(int i=0;i<5;i++){
        printf("%d ",b[i]); 
    }
    
    
    swap(a,b,5);
    
    printf("\n\n交换数组后:\n");
    printf("数组a里的元素为:\n"); 
    for(int i=0;i<5;i++){
        printf("%d ",a[i]); 
    }
    
    printf("\n\n数组b里的元素为:\n"); 
    for(int i=0;i<5;i++){
        printf("%d ",b[i]); 
    }
    
    return 0;
} 

img

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7578625
  • 你也可以参考下这篇文章:实现Swap函数,将两个数交换
  • 除此之外, 这篇博客: Swap函数实现中的 Swap函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 基本实现

      1)一般实现(需临时变量)

      // 引用实现
      Swap1(int &x, int &y)
      {
          int temp;
          temp = x;
          x = y;
          y = temp;
      }
      // 调用
      int x = 5;
      int y = 6;
      Swap1(x, y);
      
      // 指针实现
      Swap1(int *x, int *y)
      {
          int temp;
          temp = *x;
          *x = *y;
          *y = temp; 
      }
      // 调用
      int x = 5;
      int y = 6;
      Swap1(&x, &y);
      

      2)利用异或操作实现(不需临时变量)

          // 引用实现
          void Swap2(int &x, int &y)
          {
              x ^= y;
              y ^= x;
              x ^= y;
          }
          // 调用
          int x = 5;
          int y = 6;
          Swap2(x, y);
      
          // 指针实现
          void Swap2(int *x, int *y)
          {
              *x ^= *y;
              *y ^= *x;
              *x ^= *y;
          }
          // 调用
          int x = 5;
          int y = 6;
          Swap2(&x, &y);
      

      3)利用加减操作实现(不需临时变量)

          // 引用实现
          void Swap3(int &x, int &y)
          {
              x = x + y;
              y = x - y;
              x = x - y;
          }
          // 调用
          int x = 5;
          int y = 6;
          Swap3(x, y);
      
          // 指针实现
          void Swap3(int *x, int *y)
          {
              *x = *x + *y;
              *y = *x - *y;
              *x = *x - *y;
          }
          // 调用
          int x = 5;
          int y = 6;
          Swap3(&x, &y);
      
    • 宏定义实现

      #define swap(x, y) { x ^= y; y ^= x; x ^= y; }
      #define swap(x, y) { x = x + y; y = x - y; x = x - y; }
      // 调用
      int x = 5;
      int y = 6;
      swap(x, y);
      
    • 模板实现

      1)一般实现(需临时变量)

      // 引用实现
      template <class T> void Swap(T& x, T& y)
      {
          T temp;
          temp = x;
          x = y;
          y = temp;
      }
      // 调用
      double x = 5.5;
      double y = 6.5;
      Swap(x, y);
      
      // 指针实现
      template <class T> void Swap(T* x, T* y)
      {
          T temp;
          temp = *x;
          *x = *y;
          *y = temp;
      }
      // 调用
      double x = 5.5;
      double y = 6.5;
      Swap(&x, &y);
      

      2)利用加减操作实现(不需临时变量)

      // 引用实现
      template <class T1,  class T2> void Swap(T1& x, T2& y)
      {
          x = x + y;
          y = x - y;
          x = x - y;
      }
      // 调用
      double x = 5.5;
      double y = 6.5;
      Swap(x, y);
      
      // 指针实现
      template <class T1,  class T2> void Swap(T1* x, T2* y)
      {
          *x = *x + *y;
          *y = *x - *y;
          *x = *x - *y;
      }
      // 调用   
      double x = 5.5;
      double y = 6.5;
      Swap(&x, &y);
      

    注意:由于异或实现,是针对整数实现的,故不建议利用模板实现。原因:当用模板方式实现利用异或方法交换两个数,调用时,交换函数传入两个double类型的变量,此时编译就会出错。

  • 以下回答由chatgpt基于相关博客总结生成:

    方法一:利用指针实现swap函数,具体实现方法和使用方法如下:

    #include <iostream>
    using namespace std;
    
    void swap(int *a, int *b) {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    
    int main() {
        int a[] = {1, 2, 3, 4, 5};
        int b[] = {6, 7, 8, 9, 10};
        int n = sizeof(a) / sizeof(int);
        for (int i = 0; i < n; i++) {
            cout << "a[" << i << "]=" << a[i] << ", b[" << i << "]=" << b[i] << endl;
            swap(&a[i], &b[i]);
            cout << "a[" << i << "]=" << a[i] << ", b[" << i << "]=" << b[i] << endl << endl;
        }
        return 0;
    }
    

    方法二:利用函数模板实现swap函数,具体实现方法和使用方法如下:

    #include <iostream>
    using namespace std;
    
    template <typename T>
    void swap(T &a, T &b) {
        T temp = a;
        a = b;
        b = temp;
    }
    
    int main() {
        int a[] = {1, 2, 3, 4, 5};
        int b[] = {6, 7, 8, 9, 10};
        int n = sizeof(a) / sizeof(int);
        for (int i = 0; i < n; i++) {
            cout << "a[" << i << "]=" << a[i] << ", b[" << i << "]=" << b[i] << endl;
            swap(a[i], b[i]);
            cout << "a[" << i << "]=" << a[i] << ", b[" << i << "]=" << b[i] << endl << endl;
        }
        return 0;
    }