C语言中常用的三种排序方法的探讨

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(23)
由于矢量场沿平面的平移变换的不变性,Q (x,y,z) 处的矢量
为:E#(x,y,z)=E#(0,0,z)=EZ(z)k& 设点Q′(x,y,- z)处的矢量为:
Hale Waihona Puke Baidu
(24)
轴方向的平移得到: 即:E#(ρ,ω,z)=E#(ρ,ω,0)=Ex(ρ)cosω$i +Ex(ρ)sinω$j , (19) 该点矢量与 z 值无关仅是 ρ 的函数,大小为 Ex(ρ),为径向
由式 (24),(27) 我们得到无限大带电平面产生矢量场的分
布:到平面距离相同的地方矢量大小相等,各点矢量方向都是沿
3 无限大带电平面产生的矢量场
垂直于平面的方向,在平面的两侧矢量场的方向相反。因此在利
无限大带电平面产生矢量场的对称性对应于矢量场关于二
维转动变换、沿平面的平移变换和空间反射变换的不变性。
for(j=i- 1;j>=0&&t<a[j];j- - )
(2)数据本身的大小;
a[j+1]=a[j];
(3)关键字的分布情况;
a[j+1]=t;}}
(4)对排序稳定性的要求
3.4 算法分析
在实际的应用中,一般情况下,当 n 较小时(n<=50),则可采
空间效率:插入法排序过程中仅用了一个辅助单元,即空间 用插入法或选择法排序,由于插入法排序所需的数据元素移动较
’’’’’’’’’’’’’’’’’’’’’’’’’版’社’,20’02’.144’ ̄1’48.’’’’’’’’’’’’’’’’’
(上接 16 页)经排好序的数列中的适当位置,使数列依然有序;直 度为 o(n2)
到待排序数据元素全部插入完为止。
稳定性:插入法排序是一种稳定排序方法。
3.2 排序过程 关键字:9 8 5 14 2
(21) (22)
E#(ρ,ω,0)=Ex(ρ,0,0)cosω$i +Ex(ρ,0,0)sinω$j ,
(18)
大小为 Ex(ρ,0,0),方向为:XOY 平面内方向角为ω,即为ρ%的 方向。
在空间内任一点Q′(ρ,ω, z)的矢量可由Q(ρ,ω, 0)点矢量对于
则点P(0,0,z)出的矢量为:E#(0,0,z)=EZ(0,0,z)k&
关键字:C 语言 冒泡法排序 选择法排序 插入法排序
空间效率:冒泡法排序仅用了一个辅助单元, 即空间复杂度 为 o(1)
时间效率(见表 1):
排序是程序设计中非常重要的内容,每一种语言都涉及到排 序,它的功能是将一组无序的数据(包括整数、实数、字符串)变成 有序,结果有两种:升序(数据从小到大)或者降序(数据从大到小 排列)。 C 语言编程中排序的方法很多,但常用的排序方法有:冒 泡法排序、选择法排序、插入法排序,每一种排序方法的基本思 想、排序过程各不相同,现将该三种排序方法进行分析,以便初学 者更好理解及应用(以升序为例)。本文主要从排序的思想、排序的 过程以及算法的稳定性(一般来说,排序过程中所进行的比较操 作和交换数据仅发生在相邻的记录之间,没有大步距的数据调整 时,则排序算法是稳定的,“稳定性”是由算法本身决定的。)三个 方面进行探讨。
若待排序元素处于随机状态,则插入法排序的平均时间复杂 【2】严蔚敏.数据结构(C 语言版)【M】.北京:清华大学出版社,2003.
56
(25)
矢量场对 XOY 平面的空间反射变换的不变性利用(11)式可
得:
! "! "! "! " Ex(x,y,- z) 1 0 0


Ey(x,y,- z) = 0 1 0 · 0 = 0
Ez(x,y,- z) 0 0 - 1 Ez(z) - Ez(z)
(26)
则点Q′(x,y,- z)处的矢量
E#(x,y,- z)=- EZ(z)k& (27)
1.4 算法分析
若待排序元素处于随机状态,则冒泡法排序的平均时间复杂 度为 o(n2)
稳定性:冒泡排序是一种稳定排序方法。
2 选择法排序
2.1 基本思想 在待排序的一组数据元素中,选出最小的一个数据元素与第
一个位置的数据元素交换;然后在剩下的数据元素当中再找最小 的与第二个位置的数据元素交换,如此循环到只剩下最后一个数 据元素为止。 2.2 排序过程
复杂度为 o(1)
选择法排序多,因而当数据元素本身信息量较大时,用选择法排
时间效率(见表 3):
序较好;若数据元素的初始状态已基本有序,选用插入法排序效
率较高,若初始状态基本反序,选用选择法为宜。当 n 较大且没有
规律时,可采用其它的排序算法。
参考文献:
【1】谭浩强.C 程序设计(第二版)【M】.北京:清华大学出版社,2004.
若待排序元素处于随机状态,则选择法排序的平均时间复杂 度为 o(n2)
稳定性:选择法排序是一种稳定排序方法。
3 插入法排序
3.1 基本思想 每次将一个待排序的数据元素,插入到前面已(下转 56 页)
16
甘肃科技纵横
工业科技
2006 年(第 35 卷)第 5 期
! "! "! "! " Ex(ρ,ω,0) cosω - sinω 0 Ex(ρ,0,0) Ex(ρ,0,0)cosω
矢量ρ%的方向。 由式(19)我们得到柱对称矢量场的分布:距离轴线半径相同
的地方矢量大小相等,各点矢量方向都是沿垂直于轴线的径向。 因此在利用高斯定理求解场强时,所做的高斯面的形状是同轴圆
柱面。
E#(x,y,- z)=Ex(x,y,- z)$i +Ey(x,y,- z)j+Ez(x,y,- z)k&,
甘肃科技纵横
信息技术
2006 年(第 35 卷)第 5 期
C 语言中常用的三种排序方法的探讨
梁凤兰
(宿迁学院 计算机系,江苏 宿迁 223800)
摘要:排序是程序设计中很重要的内容,其方法也很多,在 C 语言中有三种:冒泡法排序、选择法排序、插入法排序,笔者将该 三种方法进行详细分析,以便大家能够更好的理解和应用此三种 方法。
关键字:9 8 5 14 2 第一趟(将最小值 2 选出与第一个数 9 交换位置): 2 [8 5 14 9] 第二趟 (在剩下的数中找出最小值 5 与第二个数 8 交换位 置): 2 5 [8 14 9] 第三趟(在剩下的数中找出最小值 8 不要交换): 2 5 8 [14 9] 第四趟 (在剩下的数中找出最小值 9 与第四个数 14 交换位 置): 2 5 8 9 14 2.3 算法实现 void sort(int a[], int n) {int i,j,k,t; for(i=0;i<n- 1;i++) {k=i; for(j=i+1;j<n;j++) if(a[k]>a[j]) k=j; if(k!=i) {t=a[i]; a[i]=a[k];a[k]=t;}}} 2.4 算法分析 空间效率:选择法排序过程中仅用了一个辅助单元,即空间 复杂度为 o(1) 时间效率(见表 2):
法、插入法,在解决实际问题过程中采用的排序算法有很多种,且
void sort(int a[],int n)
这些算法各有其优缺点,难以得出哪个最好,哪个最坏的结论,因
{int i,j,t;
此,排序方法的选用应视具体场合而定。一般情况下考虑的原则
for(i=1;i<n;i++)
有:
{t=a[i];
(1)待排序的数据个数 n;
EY(ρ,ω,0) = sinω cosω 0 · 0
= Ex(ρ,0,0)sinω
EZ(ρ,ω,0) 0 0 1


(17)
则 Q 点的矢量为:
! " Ex(0,0,z)cosω- EY(0,0,z)sinω
Ex(0,0,z)sinω- EY(0,0,z)cosω EZ(0,0,z)
! " 则有:Ex(0,0,z)=0 EY(0,0,z)=0
第三趟(将 14 放在适当的位置)
序和冒泡法排序的时间代价可能达到 o(n)量级;上述三种排序算
5 8 9 14 [2]
法的空间复杂度均为 o(1);上述三种排序算法均为稳定的排序方
第四趟(将 2 放在适当的位置)
法。
2 5 8 9 14
C 语言编程中的排序方法远远不止本文讨论的冒泡法、选择
3.3 算法实现
取无限大平面内一点 O 为坐标原点,轴在平面内建立三维直
角坐标系。取 z 轴上一点 P(0,0,z),该点矢量为:
E#(0,0,z)=Ex(0,0,z)$i +Ey(0,0,z)j+Ez(0,0,z)k&,
(20)
由于该矢量场对二维转动变换的不变性,利用(2)式可得:
用高斯定理求解场强时,所做的高斯面的形状是柱面,柱侧面垂 直于平面,柱两底面平行等距于平面,形状任意。
1 冒泡法排序
1.1 基本思想
相邻的两个元素进行比较,将小的调到前面,大的调到后面。
1.2 排序过程
关键字:9 8 5 14 2
第一趟比较:
第一次 第二次 第三次 第四次 结果















14
14
14
14





14
第二趟比较:
第一次 第二次 第三次 结果












4 小结
第一趟(将 8 放在适当的位置)
评价一个算法的好坏,主要分析它的时间复杂度和空间复杂
8 9 [5 14 2 ]
度,当二者发生冲突的时,往往倾向于时间复杂度,上述三种排序
第二趟(将 5 放在适当的位置)
算法的时间复杂度都为:o(n2),但在某些特殊况下有可能取得很
5 8 9 [14 2]
好的效果,如,当初始序列已排序或接近排序的情况下,插入法排




第三趟比较:
第一次 第二次 结果









第四趟比较:
第一次 结果




1.3 算法实现
void bubble(int a[], int n)
{int i,j,k;
for(i=n- 1;i<0;i- - )
for(j=0;j<i;j++)
if(a[j]>a[j+1])
{k=a[j];a[j]=a[j+1];a[j+1]=k;}}
EY(0,0,z) = sinω cosω 0 · EY(0,0,z) =
2003.24 ̄30. 【2】马中骐.物理学中的群论【M】. 北京:科学出版社,2001.159 ̄164.
EZ(0,0,z) 0 0 1
EZ(0,0,z)
【3】王少杰,顾牡,毛骏健.大学物理学【M】.第二版上册. 上海:同济大学出
由此可以看出,具有一定对称性的电场的形状是可以确定 的。对称性越好的电场其图像就越能确定,对称性不是很好的电 场其图像的确定性就较弱。 参考文献: 【1】赵凯华,陈熙谋. 新概念物理教程:电磁学【M】.北京:高等教育出版社,
! "! "! " Ex(0,0,z) cosω - sinω 0 Ex(0,0,z)
相关文档
最新文档