排序算法一直都是让我头疼的算法。为了全面掌握排序算法,我就整理了常用的排序算法。 首先我们来了解一些基本概念: (1)稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就 说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5, 则我们说这种排序是稳定的,因为a2排序前在a4的前面,...
by lanlovehua - Linux文档专区 - 2009-10-23 20:43:19 阅读(979) 回复(0)
经典排序思想(c语言) 2008年05月05日 星期一 20:48 /* =============================================== 作者:linweilee 时间:2005-7-25 目的:经典排序思想(c语言) ================================================ */ /* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和非稳定排序 简单地说就是所有相等...
这里的基数排序用LSD方法,即从最右边位开始,把位数相同的放在一起,这步需要把数组按这个规则分配到一个二维数组,分配完后,再把这个二维数组从新顺序放回到原来数组。 然后从右二位开始,重复以上,直到数组里面位数最高的数都分配过。最后放回原来数组的时候,整个数组就是顺序的了。还有就是要先知道数字位数的范围,这里最多为3位数。 整个算法很好理解,主要是程序里面的处理位数,复制数组很麻烦,不小心就错了。[code]#i...
/* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就 说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5, 则我们说这种排...
* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就 说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5, 则我们说这种排序是...
本帖最后由 jack1007 于 2012-10-25 10:04 编辑 堆排序思想: 首先把数组看成是一个无序的堆结构,然后首先把数组构建成大根堆,及所有父节点不小于他的两个子节点。 构建的大根堆的特点是顶点值一定不小于所有子节点的值。 然后把大根堆的顶点,也就是数组第一个元素值和堆的尾节点值交换。 这样最大值就一定最后面。尾节点之前的堆结构就失去大根堆特性了,然后需要重新构建大根堆(除了尾节点以外,因为尾节点已经有顺序了,...
本帖最后由 jack1007 于 2012-10-24 13:44 编辑
之前纠结半天,还是分开写好理解多了,先写直接插入排序函数,再用插入排序函数进行希尔分组排序。[code]#include
#include
用c实现的插入排序法,先输入10个数,然后利用插入排序法进行排序,将结果输出。算法简单,可供初学者学习。 #include "stdio.h" #include "conio.h" main() { int a[10],r[11]; int *p; int i,j; for(i=0;ir[0]) { r[j+1]=r[j]; j--; } r[j+1]=r[0]; } for(i=1;i 本文来自chinaUnix博客,...
重温经典排序思想--c语言常用排序全解关键词: 排序 重温经典排序思想--c语言常用排序全解 来源: http://blog.csdn.net/rerli/archive/2003/12/15/19040.aspx /* =============================================== 作者:rerli 时间:2003-12-15 目的:重温经典排序思想,并用c语言指针实现排序算法 ================================================ */ /* =================...
归并排序主要分两步:
一是将序列分成两份子序列,然后每个子序列再分成两份,如此下去,直到每个序列里面只有一个元素,那么可以认为序列有序了。这个由一个递归功能的mergesort函数实现。
二是完成两个有序子序列合并,在merge函数里面实现。
将两个部分组合起来,就实现了归并排序,mergesort函数实现。
代码如下:[code]#include