问答题 对无序序列:(70,73,69,23,93,18,11,68),分别用下列方法进行排序,编写程序。
   (1)快速排序
   (2)简单选择排序
【正确答案】算法由主函数和快速排序递归算法、简单选择排序、输出四个函数组成。
   程序如下:
   #include<stdio.h>
   #define LENGTH 8
   void QuickSort(int r[],int m,int n)    /*快速排序递归算法*/
   {
      int i,j;
      int temp;
      if(m<n)
   {
     i=m;
     j=n;
     temp=r[i];    /*基准记录暂存入temp中*/
     while(i!=j)    /*从序列的两端交替向中间扫描*/
     {
       while((r[j]>=temp)&&(i<j))j--;  /*扫描比基准记录小的位置*/
       if(i<j)
       {
          r[i]=r[j];    /*将比基准记录小的记录移到低端*/
          i++;
       }
       while((r[i]<=temp)&&(i<j))i++;    /*扫描比基准记录大的位置*/
       if(i<j)
       {
         r[j]=r[i];    /*将比基准记录大的记录移到高端*/
         j--;
       }
     }
   r[i]=temp;    /*基准记录到位*/
   if(m<J)QuickSort(r,m,i-1);    /*对低端子序列递归排序*/
   if(i<n)QuickSort(r,i+1,n);    /*对高端子序列递归排序*/
 }
}
void SelectSort(int r[],int n)    /*简单选择排序*/
{
   int i,j,min;
   int swap;
   for(i=0;i<n;i++)
   {
     min=i;
     for(j=i+1;j<n;j++)
       if(r[j]<r[min])
         min=j;    /*存放相对较小关键字的下标*/
     if(min!=i)
     {
       swap=r[min];    /*交换记录*/
       r[min]=r[i];
       r[i]=swap;
     }
   }
   printdata(r,n);
  }
  void printdata(int r[],int n)
  {
   int i;
   for(i=0;i<n;i++)
   printf("/%d",r[i]);
 }
 vold main()    /*主程序*/
 {
   int r[LENGTH]={70,73,69,23,93,18,11,68};    /*定义数组并赋初值*/
   int r1[LENGTH];    /*暂用数组*/
   int i,m=0,n=LENGTH;
   for(i=0;i<LENGTH;i++)    /*复制数组*/
     r1[i]=r[i];
   printf("\nQuickSort output:");
   QuickSort(r,m,n-1);    /*快速排序递归算法*/
   printdata(r,n);    /*快速排序后输出*/
   for(i=0;i<LENGTH;i++)
     r1[i]=r[i];
   printf("\nSelectSort output:");
   SelectSort(r,n);    /*简单选择排序并输出*/
  }
   输出结果为:
   QuickSort output:11 18 23 68 69 70 73 93
   SelectSort output:1118 23 68 69 70 73 93
【答案解析】