顺序表排序

定义一个顺序表

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个数的排序。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值