排序算法一直都是让我头疼的算法。为了全面掌握排序算法,我就整理了常用的排序算法。 首先我们来了解一些基本概念: (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)
这里的基数排序用LSD方法,即从最右边位开始,把位数相同的放在一起,这步需要把数组按这个规则分配到一个二维数组,分配完后,再把这个二维数组从新顺序放回到原来数组。 然后从右二位开始,重复以上,直到数组里面位数最高的数都分配过。最后放回原来数组的时候,整个数组就是顺序的了。还有就是要先知道数字位数的范围,这里最多为3位数。 整个算法很好理解,主要是程序里面的处理位数,复制数组很麻烦,不小心就错了。[code]#i...
本帖最后由 jack1007 于 2012-10-25 10:04 编辑 堆排序思想: 首先把数组看成是一个无序的堆结构,然后首先把数组构建成大根堆,及所有父节点不小于他的两个子节点。 构建的大根堆的特点是顶点值一定不小于所有子节点的值。 然后把大根堆的顶点,也就是数组第一个元素值和堆的尾节点值交换。 这样最大值就一定最后面。尾节点之前的堆结构就失去大根堆特性了,然后需要重新构建大根堆(除了尾节点以外,因为尾节点已经有顺序了,...
本帖最后由 jack1007 于 2012-10-24 13:44 编辑
之前纠结半天,还是分开写好理解多了,先写直接插入排序函数,再用插入排序函数进行希尔分组排序。[code]#include
归并排序主要分两步:
一是将序列分成两份子序列,然后每个子序列再分成两份,如此下去,直到每个序列里面只有一个元素,那么可以认为序列有序了。这个由一个递归功能的mergesort函数实现。
二是完成两个有序子序列合并,在merge函数里面实现。
将两个部分组合起来,就实现了归并排序,mergesort函数实现。
代码如下:[code]#include
递归函数quicksort里面没有判断左右范围大小,导致无穷递归,纠结了半天。闲来没事,写简单的数据结构,学学编程。[code]#include
有执行操作类型(几十上百种)为 a、b、c、d、e、f、g...A、B、C.... 现在已知执行操作顺序为(其中逗号表示并行可同时执行,>的左边表示必须先执行的操作,右边表示后执行的操作) b> a,e,A,C,f e>B,d,A>g h,w>b>c>a p>q>y y>x l>m>n ... ... 每一行代表一个操作顺序,其中的操作类型可以在多行中出现。 最终想得到分组排序结果为: h,w>b>C,f,c>e,a>B,d>A>g p>q>y>x l>m>n
/** * Copytright (c) blueantelope, 2008 All rigths reserved. * 算法研究之用 */ package org.blueantelope.mysrc.Arithmetic; /** * 排序算法 * @author blueantelope * @version 0.1 * @since 2008-05-13 */ public class SortClass { private static final int[] unSort = {4, 6, 8, 2, 3, 1, 5, 7, 9, 12, 11}; // 未排序内容 /** * 复制未排序的数组而得到新的数组 * @return 未排序...
排序算法-插入排序 插入排序算法:数组长度为N,共遍历P=(1到N-1)次,每次遍历下标<=P的数字已按大小排序。[code] | 32,23,54,43,74,66,94,86 P=1| 23,32,54,43,74,66,94,86 P=2| 23,32,54,43,74,66,94,86 P=3| 23,32,43,54,74,66,94,86 P=4| 23,32,43,54,74,66,94,86 P=5| 23,32,43,54,66,74,94,86 P=6| 23,32,43,54,66,74,94,86 P=7| 23,32,43,54,66,74,86,94[/code]java实现如下: Java代码[code]1.p...
[code]
#include