定义一个顺序表
typedef struct
{
int *p;
int length;
} list;
初始化一个顺序表
status csh(list &L)
{
L.p=new status(MAXSIZE);
if(!L.p)
exit(OVERFLOW);
L.length=0;
return ok;
}
顺序表排序函数
status px(list &L)
{
int i,qw,q;
for(i=1;i<L.length;i++)
{
q = i-1;
qw = L.p[i];
while(q >= 0&& qw < L.p[q])
{
L.p[q+1] = L.p[q];
q--;
}
L.p[q+1] = qw;
}
return ok;
}
分析
首先以第二个数为基准,第二个数与第一个数进行比较,小于则替换。之后第三个数(为基准)跟第二个数比较小于则替换,如果小于第二个数,替换后再跟第一个数进行比较,小于则替换,再第四个数,第五个数,以此类推直到最后一个数比较完。最后将基准赋给空位,则排序完成。
注意点
1.若小于前值丢给后值;初始比较值(即最后值)会丢掉,因此要有一个值来表示。
2.同时还要一个值表示数值依次前推的位置。
3.条件循环 while(q>=0&& L.p[i]< L.p[q]) 在后面 L.p[i]改变了 要用一个变量同 1.
总结
总的来说即是从前往后中的从后往前。基准值从前往后,比较顺序从后往前,如第三个数与第二个数比较完,小于替换后再第二个值与第一个值比较实现前三个数的排序,再基准往后推直到实现前n个数的排序。