数据结构java版四 排序应用

来源:互联网 发布:网络股票有哪些 编辑:程序博客网 时间:2024/05/03 13:27

-树形选择排序_写出树形选择排序的实现

一般而言,我们不会直接使用树形选择排序到实际工程中。因为这种方法需要额外的存储空间来建树。
但这种排序方法不失为练习逻辑能力的好机会;同时它也是堆排序思想的基础。
请写出树形选择排序的实现。
注意:
1. 树形的表达,未必使用真正的二叉树来表达,完全二叉树的父节点与孩子节点的序号有固定关系。用数组就可以了。
2. 根节点输出后,如何处理?寻找其值来源?很麻烦!可不可以在树的节点中不要存储值,只存待排序数组的元素序号?

-归并排序_完成merge方法

在工程问题中,当对大量数据进行排序的时候,数据往往是放在数组中的。

这时进行排序需要一些腾挪的技巧。一般是使用一个临时的数组空间保存中间结果,排好序以后,再拷贝回原来的数组。

下面的代码是采用递归的思想进行递归排序的。请完成merge方法。

// 对data数组中的 [a,b) 区间的数据进行归并排序,
// 排序结束后,[a,b)间数据处于升序有序状态
static void mergeSort(int[] data, int a,int b)
{
if (a >= b) return;

int mid=(a+b)/2;

mergeSort(a,mid);
mergeSort(mid+1,b);

merge(a,mid,b);
}

// data中的数据, [low,mid), [mid,high) 是两段待归并数据。归并后,[low,high) 整体有序
static void merge(int[] data, int low,int mid,int high)
{
int[] tmp = new int[high-low];
}

-堆排序_如何操作效率最高

堆的特征是每个节点的值不大于其孩子节点的值。

假设现在有一个已经建好的堆。这时,需要把一个新元素加入进来,同时仍然保持着堆的性质,该如何操作效率最高?

-多关键字排序_内存不足如何处理

当记录数目十分多的时候,又希望进行多关键字排序,如果内存不足,如何处理?

-链式基数排序_对整数序列进行排序

低关键字优先的基数排序算法很有创新。

请对整数序列进行排序。

随机产生1000个整数,其中整数的范围0~9999

可以用十进制的每个位为关键字。排序时使用十个动态数组为临时空间,进行分配和收集。

采用低关键字优先的基数排序完成对整数序列的排序任务。

注意体会仅仅依靠分配、收集的手段即可完成排序。

-按要求操作

从键盘读入一个由字母构成的串(不大于30个字符)。

从该串中取出3个不重复的字符,求所有的取法。

取出的字符,要求按字母升序排列成一个串。

不同的取法输出顺序可以不考虑。

例如:
输入:
abc
则输出:
abc

输入:
abcd
则输出:
abc
abd
acd
bcd

输入:
abcaa
则输出:
abc

-对元素进行排序

设有 5 个互不相同的元素 a、b、c、d、e,能否通过不多于 7 次比较就将其排好序?
如果能,请列出其比较过程;如果不能,则说明原因。
0 0
原创粉丝点击