【正确答案】算法由主函数和快速排序递归算法、简单选择排序、输出四个函数组成。
程序如下:
#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
【答案解析】