求高手帮帮忙、、关于排序算法的!!

下面这些算法要我们写一个主函数,然后运行结果,请问主函数怎么写,求大虾们帮我完善这个程序,只要可以运行,输出正确的排序结果就给分!!
/* 直接插入排序,升序 */
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);
}

int main(){
int a[10] = {12, 1, 5, 3, 34, 65, 17, 365, 100, 71};
int len = sizeof(a)/sizeof(int); //数组长度
int i;
cout<<"排序前数组为:"<<endl;
for(i=0; i<10; i++ ) cout<<a[i]<<' '; //打印排序前的数组
cout<<endl;
StraightInsertSort(a, int n);//调用排序算法
for(i=0; i<10; i++ ) cout<<a[i]<<' '; //打印排序后的数组
cout<<endl;
return 0;
}

因为你给出的算法参数都不是指针,所以不能对原数组进行修改,所以建议你的算法调用参数第一个改为指针传递~比如
void StraightInsertSort(int r[], int n)改为
void StraightInsertSort(int *r, int n)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-30
#include<stdio.h>
main()
{ char str[5];
char fun(char *p);
gets(str);
fun(str);
}
char fun(char *p)
{ char ch;
int i,j;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(*(p+i)<*(p+j))
{ ch=*(p+i);
*(p+i)=*(p+j);
*(p+j)=ch;
}
for(i=0;i<5;i++)
printf("%c",*(p+i));
}