快序排序/mergeSort的运用实例(同步与54bk.com上的发表)
来源:互联网 发布:maya mac 2016 破解 编辑:程序博客网 时间:2024/04/27 12:45
(1)通过merge排序,把相同字符串排在了一起,这个我们直接使用java的排序方法;
(2)分类统计,例如strArray数组中有多少种字符串;
(3)统计每种字符串各有多少个;
(4)按照个数多少进行排序,并进行结果赋值(组装成一个二维数组)。
源代码如下:
package common;
import java.util.*;
public class QuickSort {
public QuickSort() {
}
/**
* swap
* 交换权值,使之从大到小排列
*
* @param darray double[] 权值数组
* @param i int
* @param j int
*/
private static void swap(double[] darray, int i, int j) {
double t;
t = darray[i];
darray[i] = darray[j];
darray[j] = t;
}
/**
* mergeSort
* 对数字或者字符串都可以排序
* 先让相同的对象排在一起,再进一步分析、排序
* @param strarray String[] 要排序的字符串数组或者数字数组
* @return String[][] 返回结果数组,记录排序后的百分比,次数
*/
public static String[][] logSort(String[] strarray) {
String[][] resArray = null;
if (strarray != null) {
Arrays.sort(strarray); //先排序,使得相同的对象排在一起
/*
for (int i = 0; i < strarray.length; i++) {
System.out.print(strarray[i] + " ");
}
*/
int uniqueNumbers = 0;
String biao = "";
for (int i = 0; i < strarray.length; i++) {
if (!strarray[i].equals(biao)) {
uniqueNumbers++; //记录不同对象种类数
biao = strarray[i];
}
}
//System.out.print(uniqueNumbers);
resArray = new String[uniqueNumbers][3]; //返回结果数组
String[] name = new String[uniqueNumbers]; //记录名称
double[] cishu = new double[uniqueNumbers]; //记录次数
int uniqueIndex = 0;
int m = strarray.length;
for (int i = 0; i < strarray.length; ) {
biao = strarray[i];
int j = 1;
//循环找到相同值的个数
for (; i + j < strarray.length && strarray[i + j].equals(biao); j++) {
;
}
name[uniqueIndex] = biao;//值
cishu[uniqueIndex] = j;//记录次数
//resArray[uniqueIndex][0] = biao; //值
//resArray[uniqueIndex][1] = String.valueOf(j); //记录次数
//resArray[uniqueIndex][2] = String.valueOf( (double) j / (double) m *100) +"%"; //百分比
uniqueIndex++;
i = i + j; //跳到下一个值
}
//进行最后排序
finalsort(cishu, name);
//组装结果数组
for (int n = 0; n < cishu.length; n++) {
resArray[n][0] = name[n];
resArray[n][1] = String.valueOf(cishu[n]);
resArray[n][2] = String.valueOf(cishu[n] / m * 100);
}
}
return resArray;
}
/*-------------------------------------*/
/**
*
* @param darray double[] 字符串对象出现次数数组
* @param anther String[] 字符串数组
*/
private static void finalsort(double[] darray, String[] anther) {
thirdsort(darray, 0, darray.length - 1, anther);
}
private static void thirdsort(double[] darray, int left, int right,
String[] anther) {
if (left < right) {
//先找到中心轴
int q = partition(darray, left, right, anther);
//对中心轴左边遍历
thirdsort(darray, left, q - 1, anther);
//对中心轴右边遍历
thirdsort(darray, q + 1, right, anther);
}
}
private static int partition(double[] darray, int left, int right,
String[] anther) {
//先以右边最后一个元素为轴
double s = darray[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (darray[j] >= s) {
i++;
swap(darray, i, j);
swpResult(anther, i, j);
}
}
//交换值
swap(darray, i + 1, right);
swpResult(anther, i + 1, right);
return i + 1;
}
/**
* 交换anther数组的值,主要根据次数大小顺序交换顺序
* @param String[] anther
* @param i int
* @param j int
*/
private static void swpResult(String[] anther, int i, int j) {
String r;
r = anther[i];
anther[i] = anther[j];
anther[j] = r;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
大家看到了,我使用了merge,快序排序(实际上就是冒泡的该良),在以前快序排序的参数中增加了一个数组,实质没有改变。通过实际几万个字符串使用情况看,速度还比较快,但是希望最后快序排序能改进更快,看到这篇文章的朋友有的话请给出源代码,万分感谢。
- 快序排序/mergeSort的运用实例(同步与54bk.com上的发表)
- 非递归的归并排序(MergeSort)
- win2000+Tomcat5.0.27+Oracle8.1.7配置连接池(同时在54bk上发表)
- Java排序算法(三)--归并排序(MergeSort)递归与非递归的实现
- 归并排序(MergeSort)的原理及延伸性思考
- 归并排序(MergeSort)的原理及延伸性思考
- C++实现归并排序Mergesort(使用递归的方法)
- 排序函数(直接InsertSort,希尔ShellSort,选择SelectSort,快排QuickSort,堆排HeapSort,归并MergeSort)的实现(除基数排序)
- 单链表的排序 快速排序 归并排序 quicksort mergesort
- 归并排序(MergeSort)
- 归并排序(MergeSort)
- 合并排序(MergeSort)
- 归并排序(MergeSort)
- 归并排序(MergeSort)
- 归并排序(Mergesort)
- 归并排序(MergeSort)
- 归并排序(mergeSort)
- 归并排序(MergeSort)
- 今天写了个Win32服务设置软件,呵呵,纯绿色软件
- 7月
- 最近在搞邮件程序,没有办法,用到Base64,顺便写了这个工具
- Open Source Content Management Systems (CMS) in Java
- 在.net 2.0下使用NUnit
- 快序排序/mergeSort的运用实例(同步与54bk.com上的发表)
- 05/07/23/AM
- 清华VS麻省:对比后,才知道我们的教育是多么失败zz
- 在.net中实现与ASP完全兼容的MD5算法(包括中文字符)
- 男人必看得5个故事
- 客观的评价西北工业大学
- Java 实现连接sql server 2000(JDBC数据库访问例子)
- 轻松求素数
- 谈点关于SmartClient的个人看法。