下面这些算法要我们写一个主函数,然后运行结果,请问主函数怎么写,求大虾们帮我完善这个程序,只要可以运行,输出正确的排序结果就给分!!
/* 直接插入排序,升序 */
void StraightInsertSort(int r[], int n)
{
int i, j;
for (i=2; i<n; i++)
{
/* r[0] 为辅助存储单元 */
r[0]=r[i];
j=i-1;
/* 插入项后面的记录顺序后移 */
while (r[0]<r[j])
{
r[j+1]=r[j];
j=j-1;
}
/* 插入待排序记录 */
r[j+1]=r[0];
}
}
/* 二分法插入排序,升序 */
void BinarySort(int t[], int n)
{
int x;
int l, r, m;
int i, j, k;
/* 从最先的两个元素开始排序 */
for (i=1; i<n; i++)
{
x=t[i];
l=1; /* 下限 */
r=i-1; /* 上限 */
while (l<=r)
{
/* 中间位置 */
m=(l+r)/2;
if (x<t[m]) r=m-1; /* 上限下移 */
else l=m+1; /* 下限上移 */
}
/* 插入元素 */
for (j=i-1; j>=l; j--)
t[j+1]=t[j];
t[l]=x;
}
}
/* 希尔排序,升序 */
void ShellSort(int r[], int n)
{
int i, j, k;
/* 分组选择采用希尔的选法 */
k=n/2;
while (k>=1)
{
for (i=k+1; i<n; i++)
{
/* r[0] 为辅助存储单元 */
r[0]=r[i];
j=i-k;
while ((j>0) && (r[0]<r[j]))
{
r[j+k]=r[j];
j=j-k;
}
r[j+k]=r[0];
}
/* 继续进行分组选择 */
k=k/2;
}
}
/* 直接选择排序,升序 */
void SelectSort(int r[], int n)
{
int i, j, k;
int x; /* 交换变量 */
/* 最后一个元素不需要选择 */
for (i=0; i<n-1; i++)
{
/* 选择的范围 */
k=i;
/* 选择最小的元素 */
for (j=i+1; j<n; j++)
if (r[j]<r[k])
k=j;
/* 交换 */
if (i!=k)
{
x=r[k];
r[k]=r[i];
r[i]=x;
}
}
}
/* 冒泡排序,升序 */
void BubbleSort(int r[], int n)
{
int i, j;
int x; /* 交换变量 */
for (i=0; i<n-1; i++) /* 最后一个元素不需要冒泡 */
for (j=0; j<n-i-1; j++)
if (r[j]>r[j+1]) /* 交换 */
{
x=r[j];
r[j]=r[j+1];
r[j+1]=x;
}
}
/* 快速排序,升序 */
void QuickSort(int t[], int n, int l, int r)
{
int i, j;
int x; /* 临时变量 */
if (l>=r) return;
else
{
i=l; j=r; x=t[i];
while (i!=j) /* 一轮排序结束 */
{
/* 排序码之前的各元素都小于该排序码 */
while ((t[j]>x) && (j>i)) j--;
if (i<j)
{
t[i]=t[j]; i++;
}
/* 排序码之后的各元素都大于该排序码 */
while ((t[i]<x) && (j>i)) i++;
if (i<j)
{
t[j]=t[i]; j--;
}
}
}
/* 准备下一轮排序 */
t[i]=x; i++; j--;
/* 递归 */
QuickSort(t, n, l, j);
QuickSort(t, n, i, r);
}