title: C语言题目11.写三个函数排序函数，分别采用冒泡法、选择法、插入 
desc: 1.写三个函数排序函数，分别采用冒泡法、选择法、插入法实现数据的排序，输入参数为数组，形式如下：
     void sort1(int d[]);
     void sort2(int d[]);
     void sort3(int d[]);
  在主函数main中，从输入20个数，之后根据输入的一个字符来选择使用相应的排序函数进行处理，要求如下：
  输入’B’或者’b’采用冒泡法排序；输入’S’或者’s’采用选择法排序；输入’I’或者’i’采用插入法排序。最后将排序的结果输出。
answer: #define s(a,b){int t=a;a=b;b=t;}
  #define compswap(a,b){if(b<a) swap(a,b);}
  void bubble(int a[],int left,int right)/*Ã°ÅÝÅÅÐò*/
  {
   int i,j;
   for(i=left+1;i<=right;i++)
   for(j=right;j>=i;i--)
  {
   compswap(a[j-left],a[j]);
  }
  }
  
  int mini(int a[],int i,int r)
  {
   int j,min=i;
  for(j=i+1;j<=r;j++){if(a[j]<a[min]) min=j;}
  return min;
  }
  void selection(int a[],int l,int r)/*Ñ¡ÔñÅÅÐò*/
  {
   int i;
  for(i=l;i<r;i++)
  {
  int j=mini(a,i,r);
  swap(a[i],a[j]);
  }
  }
  
  void insert(int a[],int left,int i)
  {
   int v=a[i];
   while(i>left&&(v<a[i-left]))
  {
  a[i]=a[i-left];
  i--;
  }
  a[i]=v;
  }
  void insertion(int a[],int left,int right)/*²åÈëÅÅÐò*/
  {
   int i;
  for(i=left+1;i<right;i++) insert(a,left,i);
  
  }
  
  main()
  {
    int a[10]={4,5,654,45,874,20,10,8,7,900};
    int i;
    char m;
    printf("intput b or B is bubble\n");
    printf("intput s or S is selection\n");
    printf("intput i or I is insertion\n");
    scanf("%c", &m);
  
    switch(m)
  {
    case 'b'|'B':
    for(i=0;i<9;i++)
    {
    bubble(a[i],0,0);
    printf("%d\t",a[i]);
    }
    getch();
   break;
  
    case 'S'|'s':
    for(i=0;i<9;i++)
    {
    selection(a[i],0,0);
    printf("%d\t",a[i]);
  
    }
    getch();
   break;
    case 'i'|'I':
    for(i=0;i<9;i++)
    {
    insertion(a[i],0,0);
    printf("%d\t",a[i]);
  
    }
    getch();
   break;
  }
  }
  差不多是这个样子的 我没运行过，出现错误别怪我哦，如果有什么疑问可以 Q 63216358， 希望多交流些学习的东西