c语言几种排序方法的比较,基于C语言的几种排序方法比较.doc

基于C语言的几种排序方法比较.doc

基于C语言的几种排序方法比较 【摘要】文章对c语言中的冒泡排序法、选择排序法、插入排序法进行比较讨论,以试图找出最佳排序方法。 【关键词】c语言;排序方法;比较 引言 排序是计算机程序设计中的一种重要操作,其作用是将一个数据元素(或记录)的任意序列重新排列成一个(按关键字)有序的序列[1]。按照排序记录数量分为内部排序及外部排序两类。若整个排序过程不需要访问外存便能完成,则称此类排序为内部排序。反之,若参与排序的记录数量很大,使内存不能一次容纳全部的记录,所以排序过程中需要对外存进行访问,则称此类排序为外部排序。 换句话说,内部排序仅适合待排序记录数量相对较少的序列。内部排序方法分类较多,按照排序过程依据的原则不同分类,大致分为五类:插入排序、交换排序、选择排序、归并排序和基数排序等。这里介绍的冒(起)泡排序大致属于交换排序中的一种排序方法,下面将就c语言中冒泡排序法、选择排序法、插入排序法进行比较讨论,以试图找出最佳排序方法. 1.冒泡排序法(起泡法) 1.1 冒泡排序算法分析 冒泡法算法分析:如果有n个待排序数据,需要进行n-1趟比较。在第1趟比较中,要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。 1.2 实现冒泡排序算法c语言源程序清单 #include #include main( ) int *a , i ,j , t, n ; printf ( “请输入需排序元素个数 : n ” ); scanf(" %d",&n); a (int *)malloc(sizeof(int)*n); printf ( “请输入每个数组元素 :” ); for (i 1;i< n;i i+1) scanf(“ %d”,&a[i]); for (i 1;i< n-1;i++) for (j 1;j< n-i;j++) if (a[j]>a[j+1]) t a[j];a[j] a[j+1];a[j+1] t; printf( “排序后的数组为 : “); for (i 1;i< n;i i+1) printf ( "%d ",a[i]); 1.3 冒泡排序算法特点 相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。 该排序方法的优点是比较原则简单,排序序列相对稳定;缺点是速度慢,每次只能比较移动相邻两个数据,每一趟只能减少一个数据,参与排序的记录数量相对较少。 2.选择排序法 2.1 选择排序算法分析 选择排序法的算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。 2.2 实现选择排序算法c语言源程序清单 以降序为例: #include #include main( ) int *a , i ,j , t,k, n ; printf ( “请输入需排序元素个数 : n ” ); scanf(" %d",&n); a (int *)malloc(sizeof(int)*n); printf ( “请输入每个数组元素 :” ); for (i 0;i

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值