C语言排序
LK22336
这个作者很懒,什么都没留下…
展开
-
C语言排序之冒泡排序篇
冒泡排序是一种极其简单的排序算法。它重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下: 1. 比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。 2. 对每一对相邻元素作同样的工作,从开始第一对到原创 2017-08-06 20:05:36 · 395 阅读 · 0 评论 -
C语言排序之鸡尾酒排序篇
鸡尾酒排序,也叫定向冒泡排序 是冒泡排序的一种改进。此算法与冒泡排序的不同处在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打原创 2017-08-06 20:12:11 · 1609 阅读 · 0 评论 -
C语言排序之选择排序篇
选择排序也是一种简单直观的排序算法。它的工作原理很容易理解:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。注意选择排序与冒泡排序的区别: 冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前原创 2017-08-06 20:13:47 · 573 阅读 · 0 评论 -
C语言排序之插入排序篇
插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌 对于未排序数据(右手抓到的牌),在已排序序列(左手已经排好序的手牌)中从后向前扫描,找到相应位置并插入。 插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 具体算法描述如下:1. 从第一原创 2017-08-06 20:19:50 · 411 阅读 · 0 评论 -
C语言排序之快速排序篇
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列。步骤为:1. 从序列中挑出一个元原创 2017-08-06 20:47:21 · 357 阅读 · 0 评论 -
C语言排序之归并排序篇
归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn),1945年由冯·诺伊曼首次提出。 归并排序的实现分为递归实现与非递归(迭代)实现。递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。非递归(迭代)实现的归并排序首先进行是两两归并,然后四四归并,然后是八八归并,一直下去直到归并了整个数组。原创 2017-08-06 20:45:10 · 648 阅读 · 0 评论 -
C语言排序之堆排序篇
堆排序是指利用堆这种数据结构所设计的一种选择排序算法。堆是一种近似完全二叉树的结构(通常堆是通过一维数组来实现的),并满足性质:以最大堆(也叫大根堆、大顶堆)为例,其中父结点的值总是大于它的孩子节点。 我们可以很容易的定义堆排序的过程:1. 由输入的无序数组构造一个最大堆,作为初始的无序区2. 把堆顶元素(最大值)和堆尾元素互换3. 把堆(无序区)的尺寸缩小1,并调用heapif原创 2017-08-06 20:42:45 · 301 阅读 · 0 评论 -
C语言排序之希尔排序篇
希尔排序,也叫递减增量排序,是插入排序的一种更高效的改进版本。希尔排序是不稳定的排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的:· 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率· 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位 希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性原创 2017-08-06 20:24:37 · 315 阅读 · 0 评论