数据结构C语言冒泡排序问题

#include "stdio.h"
#include <malloc.h>
typedef struct
{
int key;
}RecType;

void BubbleSort(RecType R[],int n)
{
int i,j,exchange;
for(i=1;i<n;i++)
{
exchange=0;
for(j=n-1;j>=i;j--)
if(R[j+1].key<R[j].key)
{
R[0]=R[j+1];
R[j+1]=R[j];
exchange=1;
}
if(!exchange)
break;
}
}

int main()
{
int n;
scanf("%d",&n);
RecType *p;
p = (RecType *)malloc((n+1)*sizeof(RecType ));
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&p[i].key);
}
for(i=1;i<=n;i++)
{
printf(" %d",p[i]);
}
BubbleSort(p,n);
for(i=1;i<=n;i++)
{
printf(" %d",p[i]);
}
free(p);
return 0;
}
请帮我改一下错,谢谢!

修改:
for(j=n-1;j>=i;j--)
if(R[j+1].key<R[j].key)
{
int t = 0;
t=R[j].key;
R[j]=R[j+1];
R[j+1].key=t;
exchange=1;
}
了解一下冒泡排序(BubbleSort)的基本概念:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。   由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。   用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i。
温馨提示:答案为网友推荐,仅供参考