A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

如果要对四个变量a,b,c,d(都已经有值了)用冒泡法排序  该如何弄

3 个回复

倒序浏览
  1.       int main()
  2.         {
  3.                 int a=1;
  4.                 int b=5;
  5.                 int c=3;
  6.                 int d=4;
  7.                 int[] array=Sort(a,b,c,d);

  8.                 for(int i=0;i<array.length;i++)
  9.                 {
  10.                         System.out.println(array);
  11.                 }
  12.                 return 0;
  13.         }
  14. //不知道C里有没有可变参数这个说法,OC里有,不行就弄个OC的项目试试
  15.            int[] Sort(int...arr)
  16.         {
  17.                
  18.            for(int i=0;i<arr.length-1;i++)
  19.                    {
  20.                            for(int j=i;j<arr.length-i-1;j++)
  21.                            {
  22.                                    if(arr[j+1]>arr[j])
  23.                                    {
  24.                                            int temp=arr[j];
  25.                                            arr[j]=arr[j+1];
  26.                                            arr[j+1]=temp;
  27.                                    }
  28.                            }
  29.                    }
  30.                    return arr;
  31.         }
复制代码


回复 使用道具 举报
  1. #include <stdio.h>

  2. // 定义一个主函数,作为程序的入口
  3. int main()
  4. {
  5.     // 定义两个变量用于for循环条件变量
  6.     int i,j;
  7.    
  8.     // 定义四个变量用来存放abcd
  9.     int a = 10;
  10.     int b = 15;
  11.     int c = 2;
  12.     int d = 9;
  13.    
  14.     // 定义一个数组x用来存放abcd
  15.     int x[4] = {a,b,c,d};
  16.    
  17.     // 定义temp用于冒泡排序交换变量值
  18.     int temp;
  19.    
  20.     // 冒泡排序  将a,b,c,d降序排序,i表示排序的趟数,j表示每趟排序的比较次数
  21.     for (i = 0; i<3; i++)
  22.     {
  23.         for(j = 0;j<3-i;j++)
  24.         {
  25.             if (x[j] < x[j+1])
  26.             {
  27.                 // 当前一个元素小于后一个元素时,交换它们的位置
  28.                 temp = x[j];
  29.                 x[j] = x[j+1];
  30.                 x[j+1] = temp;
  31.             }

  32.         }
  33.     }
  34.    
  35.     // 定义一个数组y用来存放abcd标志
  36.     char y[4];
  37.    
  38.     // 将数组x与数组y的变量和标志一一对应
  39.     for (i = 0; i<4; i++)
  40.     {
  41.         // 确定排序后a的位置
  42.         if(x[i] == a && y[0] != 'a' && y[1] != 'a' && y[2] != 'a' && y[3] != 'a')
  43.         {
  44.             y[i] = 'a';
  45.         }
  46.         // 确定排序后b的位置
  47.         else if(x[i] == b && y[0] != 'b' && y[1] != 'b' && y[2] != 'b' && y[3] != 'b')
  48.         {
  49.             y[i] = 'b';
  50.         }
  51.         // 确定排序后c的位置
  52.         else if(x[i] == c && y[0] != 'c' && y[1] != 'c' && y[2] != 'c' && y[3] != 'c')
  53.         {
  54.             y[i] = 'c';
  55.         }
  56.         // 确定排序后d的位置
  57.         else
  58.         {
  59.             y[i] = 'd';
  60.         }
  61.     }
  62.    
  63.     // 降序打印输出每个字母出现的次数
  64.     for (i = 0; i<4; i++)
  65.     printf("%c=%d\n",y[i],x[i]);
  66.    
  67.     return 0;
  68. }
复制代码

你看下,我做的是降序排序abcd的值,升序排序你对比着写,只要理解了冒泡排序过程,写代码并不难。
回复 使用道具 举报
  1. struct paixu
  2. {
  3.         char m;
  4.         int n;
  5. }a[4];
  6. #include <stdio.h>
  7. void main()
  8. {

  9.         a[0].n=3;a[1].n=8;a[2].n=5;a[3].n=2;
  10.             a[0].m='a';a[1].m='b';a[2].m='c';a[3].m='d';

  11.         int i,j,flag,temp;
  12.                 char temp1;
  13.         for(i=3;i>0;--i)
  14.         {
  15.                 flag=0;//变量flag用来标记本趟排序是否发生了变化
  16.                 for(j=1;j<=i;++j)
  17.                         if(a[j-1].n>a[j].n)
  18.                         {
  19.                                 temp=a[j].n;
  20.                                 a[j].n=a[j-1].n;
  21.                                 a[j-1].n=temp;
  22.                                                                 temp1=a[j].m;
  23.                                 a[j].m=a[j-1].m;
  24.                                 a[j-1].m=temp1;
  25.                                 flag=1;//如果没发生变换flag值为0,发生交换则改为1
  26.                         }
  27.                         if(flag==0)  //一趟排序过程中没有发生元素交换,则证明序列有序,排序结束
  28.                                 break;
  29.         }
  30.         printf("排序后的结果:\n");
  31.         for(i=0;i<4;++i)
  32.         printf("%c %d\n",a[i].m,a[i].n);
  33.         printf("\n");
  34. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马