排序算法有很多,如果随便给一个,可能不易服众。要是认真给一个,就能服众了?那也不一定。
这次给的代码是jdk java.util.Arrays里的代码。在对Vector上依照Collections.sort的代码进行了一些修改,其他完全一致。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.phoenix.utils;
import java.util.Vector;
/**
*
* @author Looker Cheung
*/
public class Arrays
{//排序采用了sun jdk java.util.Arrays sort的源码
private static final int INSERTIONSORT_THRESHOLD = 7;
public static void sort(Object[] a)
{
Object[] aux = new Object[a.length];
for(int i = 0; i < a.length; i ++)
{
aux[i] = a[i];
}
mergeSort(aux, a, 0, a.length, 0);
}
//归并排序
private static void mergeSort(Object[] src,
Object[] dest,
int low,
int high,
int off)
{
int length = high - low;
// Insertion sort on smallest arrays
if (length < INSERTIONSORT_THRESHOLD) {
for (int i=low; i<high; i++)
for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
return;
}
// Recursively sort halves of dest into src
int destLow = low;
int destHigh = high;
low += off;
high += off;
int mid = (low + high) >>> 1;
mergeSort(dest, src, low, mid, -off);
mergeSort(dest, src, mid, high, -off);
// If list is already sorted, just copy from src to dest. This is an
// optimization that results in faster sorts for nearly ordered lists.
if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {
System.arraycopy(src, low, dest, destLow, length);
return;
}
// Merge sorted halves (now in src) into dest
for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)
dest[i] = src[p++];
else
dest[i] = src[q++];
}
}
/**
* Swaps x[a] with x[b].
*/
private static void swap(Object[] x, int a, int b)
{
Object t = x[a];
x[a] = x[b];
x[b] = t;
}
public static void sort(Vector list)
{
Object[] a = new Object[list.size()];
list.copyInto(a);
sort(a);
for (int j=0; j<a.length; j++)
{
list.setElementAt(a[j], j);
}
}
}
这里是对j2se移植到j2me的一个例子。我们在j2se上可以发现有很多功能,j2me上没有,但有时必须要用,那就像这样移吧。
分享到:
相关推荐
对记录进行排序 ┗━━━━━━━━━━━ ┌第九章 j2me基本类的使用 ┃9_1.Boolean类的使用 ┃9_2.Byte类的使用 ┃9_3.Character类的使用 ┃9_4.Integer类的用法 ┃9_5.String类的用法 ┃9_6.StringBuffer类的用法...
共3个分卷,36M,这是第一个 ...·读、写、排序、查询和存储记录 ·管理数据,并理解数据库的概念 ·展望使用Web服务、信息管理和其他关键功能的移动应用程序 ·使用HTTP连接、网络和Web服务协同工作
用自己写的j2me rms引擎写的电话本 功能是: 1.添加 2.查询 3.列出所有的资料 1.修改 2.删除 3.排序
可以新建联系人,删除联系人,通过联系人姓名实现快速查询,联系人列表以联系人的姓名排序。j2me源码
共3个分卷,36M,这是第二个 ...·读、写、排序、查询和存储记录 ·管理数据,并理解数据库的概念 ·展望使用Web服务、信息管理和其他关键功能的移动应用程序 ·使用HTTP连接、网络和Web服务协同工作
共3个分卷,36M,这是第三个 ...·读、写、排序、查询和存储记录 ·管理数据,并理解数据库的概念 ·展望使用Web服务、信息管理和其他关键功能的移动应用程序 ·使用HTTP连接、网络和Web服务协同工作
经我细心探究,终于把J2ME中的Enumeration排序问题给解决了
刚开始是图片的旋转,如上传资源的箭头图标旋转一样。后来是一个数组,从中随机抽取n个不同的数重新组成数组,排序。旋转的图片坐标为随机的新数组中取出来的数
关于排序的算法!!!!
这个包包含接口来列举,排序和筛选 RMS 内容。 在MIDP1.0 时候,每个RMS 存储只属于创建它的MIDlet 套件。MIDP2.0 规范给RMS 包增加了一 个非常有用的能力:它允许一个MIDlet 套件和另一个MIDlet 套件共享记录存储。
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
j2me版本 更正了编辑页面下,几乎同时按下取消和确定键时,会造成死机的问题。多谢中国移动变态的测试者们。 实现了按下alt键后,滚轮上下滚动转换为左右滚动的功能。 更正九宫格菜单会同时选中两个的问题。 欢迎...
Collections是针对集合类的帮助类,它提供了一系列针对集合的搜索,排序,线程安全化等操作。 final、finally、finalize的区别? 答:final用于声明属性方法和类,分别表示:属性不可变,方法不可覆盖,类不可继承...
5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一个connect pool,然后再调用它, 8.j2ee平台与dotnet平台的区别 9.ejb的life cycle 10.session bean 和 entity bean的区别 11.ejb中的transaction机制 ...