博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[源码和文档分享]基于C语言的八大排序算法的比较
阅读量:5083 次
发布时间:2019-06-13

本文共 1055 字,大约阅读时间需要 3 分钟。

一、项目内容

将冒泡排序,选择排序,直接插入排序,希尔排序,快速排序,堆排序,归并排序,基数排序等八种排序方法做横向比较,针对相同的随机数据,比较排序算法所消耗的时间以及交换次数。

二、算法描述

2.1 冒泡排序

算法描述:

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个

  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数

  • 针对所有的元素重复以上的步骤,除了最后一个

  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2.2 选择排序

算法描述:

对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。

2.3 直接插入排序

算法描述:

每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。

2.4 希尔排序

算法描述:

先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

2.5 快速排序

算法描述:

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

参考文档和完整的文档和源码下载地址:

 

转载于:https://www.cnblogs.com/ddgg5151/p/10091521.html

你可能感兴趣的文章
[欧拉回路][并查集] Bzoj P3706 反色刷
查看>>
Python学习之路:guess_rx_wan
查看>>
字符串转化为可执行的方法
查看>>
select和epoll学习总结
查看>>
pku 3661 Running DP
查看>>
BZOJ4923 K小值查询(splay)
查看>>
被sleep开了个小玩笑
查看>>
算法基础之排序算法[图文]
查看>>
Bootstrap之导航条
查看>>
struts2源码的解读 .
查看>>
【LOJ116】有源汇有上下界最大流(模板题)
查看>>
iOS----------APP怎样做更安全
查看>>
"ServiceStack.Redis.RedisNativeClient”的方法“get_Db”没有实现。
查看>>
关于数论【polya计数法】
查看>>
bzoj3732: Network
查看>>
android post数据到服务器端工具类(包括postjson字符串、键值对)
查看>>
Java当中的IO(三)
查看>>
2.App Components-Activities/Loadres
查看>>
[LeetCode OJ] Distinct Subsequences
查看>>
[Emacs]在org-mode中用外部程序打开文件的链接
查看>>