排序问题(C语言)

来源:百度知道 编辑:UC知道 时间:2024/05/06 13:03:44
直接插入排序算法如下
void Insertsort(Rectype R[],int n)
{
int i,j;
Rectype temp;
for(i=1;i<n;i++)
{temp=R[i];
j=i-1;
while(j>=0&&temp.key<R[j].key)
{R[j+1]=R[j];
j--;
}
R[j+1]=temp;
}
}
这个Rectyoe R[]是什么意思?然后解释下j--和R[j+1]=temp实现的目的,本人初学,谢谢了

插入排序很简单的,一共n个数,每次去第i个,与前面的i-1个比较,这i-1是排好序的。while内循环的作用就是把第i个数与前面的i-1个比较,所以j--的意思就是倒过去找。
要理解R[j+1]=temp,就要看懂temp的作用,temp用来暂时保存当前需要插入的数,也就是第[i]个,这样把temp与前面每个数比较,直到找到不大于temp的,那么在找到正确位置前,每次把队伍向后排一位腾空一个位置,找到了的时候就是temp.key>=R[j].key,这时候j+1位置就是最终位置,把temp也就是目标数放进去。
上面我把temp当作一个数来说,省事,其实照你的程序看,它是一个record,记录类型,我学的语言多了点,不记得C里是不是这么叫的,所以RecType就是一个记录类型,C里面是不是叫struct?它有一些成员,比如.key,程序里比较的就是.key

Rectyoe R[]

中的Rectyoe是前面定义的一个结构,不能从这点局部程序中知道他的意义

Rectyoe R[]就是你要排序的数组,可以是int a[],此处作为参数。j--就是指向下一个数,R[j+1]=temp就是将当前满足条件的数temp一次放入数组R中,

Rectyoe *R 这样写好一些 参数1 自定义的结构体指针 参数2 个数 j-- 是偏移指针用得 R[j+1]=temp 是改变指针所指的结构体变量的值

Rectype是记录节点类型 用他声明了一个temp的变量
Rectyoe R[] 是声明了一个记录节点类型的R〔〕数组
j-- 是j的变量每运行一次他的值就-1
R[j+1]=temp实现的目的是把temp的值付给了R[j+1],也就是说现在R[j+1]的值就是temp的值