c语言查找与排序知识点,c语言查找与排序技术.ppt

本文详细介绍了快速排序和希尔排序这两种经典的排序算法。快速排序通过选取分界元素,递归地对子序列进行排序,具有较高的效率。希尔排序则是通过设置增量序列,对大间隔元素进行插入排序,逐步缩小增量直至为1,从而提高排序速度。文中给出了两种排序算法的伪代码实现,便于理解与应用。
摘要由CSDN通过智能技术生成

c语言查找与排序技术

qksort1(p,m,n) int m,n; ET p[]; { int i;if (n>m) /*子表不空*/{i=split(p,m,n); /*分割*/ qksort1(p,m,i-1);/*对前子表进行快速排序*/ qksort1(p,i+1,n);/*对后子表进行快速排序*/} return; } 快速排序----算法描述 int split(p,m,n) /*返回分界线位置*/ int m,n; ET p[]; { int i,j,k,u;ET t; i=m; j=n; k=(i+j)/2; if ((p[i]>=p[j])&&(p[j]>=p[k])) u=j; /*选取一个元素*/ else if ((p[i]>=p[k])&&(p[k]>=p[j])) u=k; else u=i; t=p[u]; p[u]=p[i]; while (i!=j){ while ((i<j)&&(p[j]>=t)) j=j-1; if (i<j) { p[i]=p[j]; i=i+1;} while ((i<j)&&(p[i]<=t)) i=i+1; if (i<j) { p[j]=p[i]; j=j-1;} } p[i]=t; return(i); } 快速排序----算法描述 程序演示 教材刊误 3.2.2 简单插入排序与希尔排序---插入类排序 1. 简单插入排序 所谓插入排序,是将无序序列中的各元素依次插入到已经有序的线性表中。 在线性表中,只包含第1个元素的子表可以看成有序表 从线性表的第2个元素开始直到最后一个元素,逐次将其中的每一个元素插入到前面已经有序的子表中。 假设线性表中前j-1个元素已经有序,现在要将线性表中的第j个元素插入到前面的有序子表中,插入过程如下: 1 1 3 5 7 6 9 ↑j=6 5 1 7 3 1 6 9 ↑j=2 1 5 7 3 1 6 9 ↑j 1 5 7 3 1 6 9 ↑j 1 3 5 7 1 6 9 ↑j 1 1 3 5 6 7 9 ↑j=7 =3 =4 =5 PROCEDURE INSORT(P,n) FOR j=2 TO n DO { T=P(j);k=j-1 WHILE (k>0)and(P(k)>T) DO { P(k+1)=P(k);k=k+1 } P(k+1)=T } RETURN 输入:待排序序列P(1:n)。输出:有序序列P(1:n)。 简单插入排序----算法描述 insort(p,n) int n; ET p[]; { int j,k; ET t; for (j=1; j<n; j++) { t=p[j]; k=j-1; while ((k>=0)&&(p[k]>t)) { p[k+1]=p[k]; k=k-1; } p[k+1]=t; } return; } 程序演示 简单插入排序----算法描述 希尔排序----思路: 将整个无序序列分割成若干小子序列分别进行插入排序子序列的分割方法如下: 将相隔某个增量h的元素构成一个子序列。在排序过程中,逐次减小这个增量,最后当h减到1时,进行一次插入排序,排序就完成。 增量序列一般取 ht=n/2k(k=1,2,…,[log2n]), 其中n为待排序序列的长度。 2. 希尔排序 输入:待排序序列P(1:n)。 输出:有序序列P(1:n)。 PROCEDURE SHLSORT(P,n) h=n/2 WHILE (h>0) DO { FOR j=h+1 TO n DO { t=P(j); i=j-h WHILE (i>0)and(P(i)>t) DO { P(i+h)=P(i); i=i-h} P(i+h)=t } h=h/2 } RETURN 希尔排序----算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值