ChinaUnix.net
相关文章推荐:

c 排序算法

/* =============================================== 作者:rerli 时间:2003-12-15 目的:重温经典排序思想,并用c语言指针实现排序算法 ================================================ */ /* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍...

by garyneville - Linux文档专区 - 2008-07-21 14:40:30 阅读(613) 回复(0)

相关讨论

排序算法一直都是让我头疼的算法。为了全面掌握排序算法,我就整理了常用的排序算法。 首先我们来了解一些基本概念: (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...

by jack1007 - C/C++ - 2012-10-26 16:59:37 阅读(2653) 回复(0)

本帖最后由 jack1007 于 2012-10-25 10:04 编辑 堆排序思想: 首先把数组看成是一个无序的堆结构,然后首先把数组构建成大根堆,及所有父节点不小于他的两个子节点。 构建的大根堆的特点是顶点值一定不小于所有子节点的值。 然后把大根堆的顶点,也就是数组第一个元素值和堆的尾节点值交换。 这样最大值就一定最后面。尾节点之前的堆结构就失去大根堆特性了,然后需要重新构建大根堆(除了尾节点以外,因为尾节点已经有顺序了,...

by jack1007 - C/C++ - 2012-10-25 10:02:33 阅读(4068) 回复(0)

本帖最后由 jack1007 于 2012-10-24 13:44 编辑 之前纠结半天,还是分开写好理解多了,先写直接插入排序函数,再用插入排序函数进行希尔分组排序。[code]#include void swap(int *a, int *b); void print_arr(int *arr, int arr_len); void shellsort(int *arr, int arr_len); void insertion_sort(int *int_arr, int div_len, int arr_len); int main() { int arr[] = {99, 56, 48, 93, 25, 32, 49, 88, 12, 74,...

by jack1007 - C/C++ - 2012-10-24 16:11:35 阅读(6881) 回复(2)

本帖最后由 teddylw1611616 于 2011-02-24 10:22 编辑 转自张明 本程序实现数据结构中的常用排序算法,用标准c++函数模板编写,不依赖于任何平台和任何项目,已经在codeblocks 10.05 (Gcc4.5.1) 和VS2010平台上测试通过。 sort.h~[code]/***************************************************************************** * sort.h * * Some sort algorithms. * * This file includes...

by teddylw1611616 - C/C++ - 2011-03-02 15:23:18 阅读(3647) 回复(10)

void bubbleSort(int numbers[], int array_size) { int i, j, temp; for (i = (array_size - 1); i >= 0; i--) { for (j = 1; j numbers[j]) { temp = numbers[j-1]; numbers[j-1] = numbers[j]; numbers[j] = temp; } } } } 堆排序算法(c) void heapSort(int numbers[], int array_size) { int i, temp; for (i = (array_size / 2)-1; i >= 0; i--) siftDown(numbers, i, array_size); for (i = array_size-1; i >= 1; i--) ...

by jia_killer - Linux文档专区 - 2009-04-01 23:29:26 阅读(618) 回复(0)

递归函数quicksort里面没有判断左右范围大小,导致无穷递归,纠结了半天。闲来没事,写简单的数据结构,学学编程。[code]#include int quichsort(int *arr, int left, int right); void swap(int *a, int *b); int main() { int arr[] = {9, 2, 1, 4, 3, 15, 11, 6, 7}; int arr_len = sizeof(arr) / sizeof(arr[0]); int i; for (i = 0; i < arr_len; i++) { printf("%d ", arr); } printf("\n"); ...

by jack1007 - C/C++ - 2012-10-23 17:46:03 阅读(5242) 回复(2)

归并排序主要分两步: 一是将序列分成两份子序列,然后每个子序列再分成两份,如此下去,直到每个序列里面只有一个元素,那么可以认为序列有序了。这个由一个递归功能的mergesort函数实现。 二是完成两个有序子序列合并,在merge函数里面实现。 将两个部分组合起来,就实现了归并排序,mergesort函数实现。 代码如下:[code]#include void print_arr(int *arr, int arr_len); void merge(int *arr, int left, int midle...

by jack1007 - C/C++ - 2012-10-26 09:59:42 阅读(1082) 回复(0)
by jeo1234 - C/C++ - 2003-07-18 11:19:05 阅读(983) 回复(0)

有执行操作类型(几十上百种)为 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

by AmboLong - Shell - 2011-08-24 09:42:34 阅读(6348) 回复(25)