- 浏览: 81372 次
- 性别:
- 来自: 陕西
文章分类
- 全部博客 (53)
- java开发 (27)
- C# (5)
- Extjs (0)
- Python (3)
- 数据库 (5)
- Flex (3)
- Oracle (3)
- mysql (2)
- javaScript (1)
- jsp/servlet (1)
- 数据结构和算法 (6)
- spring (2)
- struts (1)
- Hibernate (3)
- Ibatis (0)
- UML (0)
- Jquery (0)
- android (0)
- 数据结构和算法,排序 (4)
- Linux (2)
- C/C++ (1)
- 工具使用 (4)
- flex,java (1)
- http://irfen.iteye.com/blog/1174699 (0)
- SEO (1)
- java (1)
最新评论
-
eagle59:
谢谢分享。。。。
java SSH面试资料 -
樊明涛:
写的很不错!perfect!
java文件操作2
package temp;
import sun.misc.Sort;
/**
* @author zengjl
* @version 1.0
* @since 2007-08-22
* @Des java几种基本排序方法
*/
/**
* SortUtil:排序方法
* 关于对排序方法的选择:这告诉我们,什么时候用什么排序最好。当人们渴望先知道排在前面的是谁时,
* 我们用选择排序;当我们不断拿到新的数并想保持已有的数始终有序时,我们用插入排序;当给出的数
* 列已经比较有序,只需要小幅度的调整一下时,我们用冒泡排序。
*/
public class SortUtil extends Sort {
/**
* 插入排序法
* @param data
* @Des 插入排序(Insertion Sort)是,每次从数列中取一个还没有取出过的数,并按照大小关系插入到已经取出的数中使得已经取出的数仍然有序。
*/
public int[] insertSort(int[] data) {
int temp;
for (int i = 1; i < data.length; i++) {
for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
swap(data, j, j - 1);
}
}
return data;
}
/**
* 冒泡排序法
* @param data
* @return
* @Des 冒泡排序(Bubble Sort)分为若干趟进行,每一趟排序从前往后比较每两个相邻的元素的大小(因此一趟排序要比较n-1对位置相邻的数)并在
* 每次发现前面的那个数比紧接它后的数大时交换位置;进行足够多趟直到某一趟跑完后发现这一趟没有进行任何交换操作(最坏情况下要跑n-1趟,
* 这种情况在最小的数位于给定数列的最后面时发生)。事实上,在第一趟冒泡结束后,最后面那个数肯定是最大的了,于是第二次只需要对前面n-1
* 个数排序,这又将把这n-1个数中最小的数放到整个数列的倒数第二个位置。这样下去,冒泡排序第i趟结束后后面i个数都已经到位了,第i+1趟实
* 际上只考虑前n-i个数(需要的比较次数比前面所说的n-1要小)。这相当于用数学归纳法证明了冒泡排序的正确性
*/
public int[] bubbleSort(int[] data) {
int temp;
for (int i = 0; i < data.length; i++) {
for (int j = data.length - 1; j > i; j--) {
if (data[j] < data[j - 1]) {
swap(data, j, j - 1);
}
}
}
return data;
}
/**
* 选择排序法
* @param data
* @return
* @Des 选择排序(SelectionSort)是说,每次从数列中找出一个最小的数放到最前面来,再从剩下的n-1个数中选择一个最小的,不断做下去。
*/
public int[] chooseSort(int[] data) {
int temp;
for (int i = 0; i < data.length; i++) {
int lowIndex = i;
for (int j = data.length - 1; j > i; j--) {
if (data[j] < data[lowIndex]) {
lowIndex = j;
}
}
swap(data, i, lowIndex);
}
return data;
}
/**
* 关于Shell排序讲解 Shell排序算法依赖一种称之为“排序增量”的数列,不同的增量将导致不同的效率。
* 假如我们对20个数进行排序,使用的增量为1,3,7。那么,我们首先对这20个数进
* 行“7-排序”(7-sortedness)。所谓7-排序,就是按照位置除以7的余数分组进行
* 排序。具体地说,我们将把在1、8、15三个位置上的数进行排序,将第2、9、16个 数进行排序,依此类推。这样,对于任意一个数字k,单看A(k),
* A(k+7), A(k+14),... 这些数是有序的。7-排序后,我们接着又进行一趟3-排序(别忘了我们使用的排序增量
* 为1,3,7)。最后进行1-排序(即普通的排序)后整个Shell算法完成。
*/
/**
* shell排序法
*
* @param data
* @return
*/
public int[] shellSort(int[] data) {
for (int i = data.length / 2; i > 2; i /= 2) {
for (int j = 0; j < i; j++) {
shellInsertSort(data, j, i);
}
}
shellInsertSort(data, 0, 1);
return data;
}
/**
* shell排序“排序增量”方法
*
* @param data
* @param start
* @param inc
*/
public void shellInsertSort(int[] data, int start, int inc) {
int temp;
for (int i = start + inc; i < data.length; i += inc) {
for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -= inc) {
swap(data, j, j - inc);
}
}
}
/**
* 快速排序法
*
* @param data
* @return
*/
private static int MAX_STACK_SIZE = 4096;
private static int THRESHOLD = 10;
public int[] quickSort(int[] data) {
int[] stack = new int[MAX_STACK_SIZE];
int top = -1;
int pivot;
int pivotIndex, l, r;
stack[++top] = 0;
stack[++top] = data.length - 1;
while (top > 0) {
int j = stack[top--];
int i = stack[top--];
pivotIndex = (i + j) / 2;
pivot = data[pivotIndex];
swap(data, pivotIndex, j);
// partition
l = i - 1;
r = j;
do {
while (data[++l] < pivot)
;
while ((r != 0) && (data[--r] > pivot))
;
swap(data, l, r);
} while (l < r);
swap(data, l, r);
swap(data, l, j);
if ((l - i) > THRESHOLD) {
stack[++top] = i;
stack[++top] = l - 1;
}
if ((j - l) > THRESHOLD) {
stack[++top] = l + 1;
stack[++top] = j;
}
}
// 插入排序
insertSort(data);
return data;
}
/**
* 归并排序法
*
* @param data
* @return
*/
public int[] improvedMergeSort(int[] data) {
int[] temp = new int[data.length];
mergeSort(data, temp, 0, data.length - 1);
return data;
}
/**
* 合并排序
* @param data
* @param temp
* @param l
* @param r
*/
private void mergeSort(int[] data, int[] temp, int l, int r) {
int i, j, k;
int mid = (l + r) / 2;
if (l == r)
return;
if ((mid - l) >= THRESHOLD)
mergeSort(data, temp, l, mid);
else
insertSort(data, l, mid - l + 1);
if ((r - mid) > THRESHOLD)
mergeSort(data, temp, mid + 1, r);
else
insertSort(data, mid + 1, r - mid);
for (i = l; i <= mid; i++) {
temp[i] = data[i];
}
for (j = 1; j <= r - mid; j++) {
temp[r - j + 1] = data[j + mid];
}
int a = temp[l];
int b = temp[r];
for (i = l, j = r, k = l; k <= r; k++) {
if (a < b) {
data[k] = temp[i++];
a = temp[i];
} else {
data[k] = temp[j--];
b = temp[j];
}
}
}
private void insertSort(int[] data, int start, int len) {
for (int i = start + 1; i < start + len; i++) {
for (int j = i; (j > start) && data[j] < data[j - 1]; j--) {
swap(data, j, j - 1);
}
}
}
/**
* 交换数据顺序
*
* @param data
* @param i
* @param j
*/
private void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
public static void main(String[] args){
int[] data = {-2,1,2,4,2,0,4,555,3,99};
SortUtil sort = new SortUtil();
System.out.println(System.currentTimeMillis());
data = sort.bubbleSort(data) ;
String str = "" ;
for(int i = 0 ; i < data.length ; i ++ ){
str = str + data[i]+",";
}
System.out.println(str);
System.out.println(System.currentTimeMillis());
}
}
import sun.misc.Sort;
/**
* @author zengjl
* @version 1.0
* @since 2007-08-22
* @Des java几种基本排序方法
*/
/**
* SortUtil:排序方法
* 关于对排序方法的选择:这告诉我们,什么时候用什么排序最好。当人们渴望先知道排在前面的是谁时,
* 我们用选择排序;当我们不断拿到新的数并想保持已有的数始终有序时,我们用插入排序;当给出的数
* 列已经比较有序,只需要小幅度的调整一下时,我们用冒泡排序。
*/
public class SortUtil extends Sort {
/**
* 插入排序法
* @param data
* @Des 插入排序(Insertion Sort)是,每次从数列中取一个还没有取出过的数,并按照大小关系插入到已经取出的数中使得已经取出的数仍然有序。
*/
public int[] insertSort(int[] data) {
int temp;
for (int i = 1; i < data.length; i++) {
for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
swap(data, j, j - 1);
}
}
return data;
}
/**
* 冒泡排序法
* @param data
* @return
* @Des 冒泡排序(Bubble Sort)分为若干趟进行,每一趟排序从前往后比较每两个相邻的元素的大小(因此一趟排序要比较n-1对位置相邻的数)并在
* 每次发现前面的那个数比紧接它后的数大时交换位置;进行足够多趟直到某一趟跑完后发现这一趟没有进行任何交换操作(最坏情况下要跑n-1趟,
* 这种情况在最小的数位于给定数列的最后面时发生)。事实上,在第一趟冒泡结束后,最后面那个数肯定是最大的了,于是第二次只需要对前面n-1
* 个数排序,这又将把这n-1个数中最小的数放到整个数列的倒数第二个位置。这样下去,冒泡排序第i趟结束后后面i个数都已经到位了,第i+1趟实
* 际上只考虑前n-i个数(需要的比较次数比前面所说的n-1要小)。这相当于用数学归纳法证明了冒泡排序的正确性
*/
public int[] bubbleSort(int[] data) {
int temp;
for (int i = 0; i < data.length; i++) {
for (int j = data.length - 1; j > i; j--) {
if (data[j] < data[j - 1]) {
swap(data, j, j - 1);
}
}
}
return data;
}
/**
* 选择排序法
* @param data
* @return
* @Des 选择排序(SelectionSort)是说,每次从数列中找出一个最小的数放到最前面来,再从剩下的n-1个数中选择一个最小的,不断做下去。
*/
public int[] chooseSort(int[] data) {
int temp;
for (int i = 0; i < data.length; i++) {
int lowIndex = i;
for (int j = data.length - 1; j > i; j--) {
if (data[j] < data[lowIndex]) {
lowIndex = j;
}
}
swap(data, i, lowIndex);
}
return data;
}
/**
* 关于Shell排序讲解 Shell排序算法依赖一种称之为“排序增量”的数列,不同的增量将导致不同的效率。
* 假如我们对20个数进行排序,使用的增量为1,3,7。那么,我们首先对这20个数进
* 行“7-排序”(7-sortedness)。所谓7-排序,就是按照位置除以7的余数分组进行
* 排序。具体地说,我们将把在1、8、15三个位置上的数进行排序,将第2、9、16个 数进行排序,依此类推。这样,对于任意一个数字k,单看A(k),
* A(k+7), A(k+14),... 这些数是有序的。7-排序后,我们接着又进行一趟3-排序(别忘了我们使用的排序增量
* 为1,3,7)。最后进行1-排序(即普通的排序)后整个Shell算法完成。
*/
/**
* shell排序法
*
* @param data
* @return
*/
public int[] shellSort(int[] data) {
for (int i = data.length / 2; i > 2; i /= 2) {
for (int j = 0; j < i; j++) {
shellInsertSort(data, j, i);
}
}
shellInsertSort(data, 0, 1);
return data;
}
/**
* shell排序“排序增量”方法
*
* @param data
* @param start
* @param inc
*/
public void shellInsertSort(int[] data, int start, int inc) {
int temp;
for (int i = start + inc; i < data.length; i += inc) {
for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -= inc) {
swap(data, j, j - inc);
}
}
}
/**
* 快速排序法
*
* @param data
* @return
*/
private static int MAX_STACK_SIZE = 4096;
private static int THRESHOLD = 10;
public int[] quickSort(int[] data) {
int[] stack = new int[MAX_STACK_SIZE];
int top = -1;
int pivot;
int pivotIndex, l, r;
stack[++top] = 0;
stack[++top] = data.length - 1;
while (top > 0) {
int j = stack[top--];
int i = stack[top--];
pivotIndex = (i + j) / 2;
pivot = data[pivotIndex];
swap(data, pivotIndex, j);
// partition
l = i - 1;
r = j;
do {
while (data[++l] < pivot)
;
while ((r != 0) && (data[--r] > pivot))
;
swap(data, l, r);
} while (l < r);
swap(data, l, r);
swap(data, l, j);
if ((l - i) > THRESHOLD) {
stack[++top] = i;
stack[++top] = l - 1;
}
if ((j - l) > THRESHOLD) {
stack[++top] = l + 1;
stack[++top] = j;
}
}
// 插入排序
insertSort(data);
return data;
}
/**
* 归并排序法
*
* @param data
* @return
*/
public int[] improvedMergeSort(int[] data) {
int[] temp = new int[data.length];
mergeSort(data, temp, 0, data.length - 1);
return data;
}
/**
* 合并排序
* @param data
* @param temp
* @param l
* @param r
*/
private void mergeSort(int[] data, int[] temp, int l, int r) {
int i, j, k;
int mid = (l + r) / 2;
if (l == r)
return;
if ((mid - l) >= THRESHOLD)
mergeSort(data, temp, l, mid);
else
insertSort(data, l, mid - l + 1);
if ((r - mid) > THRESHOLD)
mergeSort(data, temp, mid + 1, r);
else
insertSort(data, mid + 1, r - mid);
for (i = l; i <= mid; i++) {
temp[i] = data[i];
}
for (j = 1; j <= r - mid; j++) {
temp[r - j + 1] = data[j + mid];
}
int a = temp[l];
int b = temp[r];
for (i = l, j = r, k = l; k <= r; k++) {
if (a < b) {
data[k] = temp[i++];
a = temp[i];
} else {
data[k] = temp[j--];
b = temp[j];
}
}
}
private void insertSort(int[] data, int start, int len) {
for (int i = start + 1; i < start + len; i++) {
for (int j = i; (j > start) && data[j] < data[j - 1]; j--) {
swap(data, j, j - 1);
}
}
}
/**
* 交换数据顺序
*
* @param data
* @param i
* @param j
*/
private void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
public static void main(String[] args){
int[] data = {-2,1,2,4,2,0,4,555,3,99};
SortUtil sort = new SortUtil();
System.out.println(System.currentTimeMillis());
data = sort.bubbleSort(data) ;
String str = "" ;
for(int i = 0 ; i < data.length ; i ++ ){
str = str + data[i]+",";
}
System.out.println(str);
System.out.println(System.currentTimeMillis());
}
}
发表评论
-
Flex+spring+hibernate+mysql+blaze DS框架搭建
2015-04-10 09:35 816以前在项目中使用Flex+spring+hibernate ... -
java使用配置文件连接mysql
2015-04-10 09:30 936java程序中连接数据库的方式很多,有的是在程序代码中直接 ... -
http://blog.mn886.net/jqGrid/
2014-12-01 13:47 0/WEB-INF/conf/,web.xml去掉classpa ... -
java中读取服务器配置文件方法
2014-07-30 10:00 1103在程序开发和设计中,我们经常把一些需要改变的数值配置在文件中, ... -
flex 安全沙箱冲突问题
2012-08-29 17:23 2174问题出现情况: 我们采用myeclipse+spring+fl ... -
flex 使用swfLoad注意事项(转)
2012-07-25 19:38 2366var swf : SWFLoader = new SWFLo ... -
javascript获取jsf table值
2012-04-25 21:38 1355这是一个jsf 中的table,我们可以通过javascrip ... -
java 读写Excel (支持office 2007)
2012-04-25 21:21 1290/** * EXCEL文档解析工具类 该工具能将EXCEL文 ... -
java读取Excel文档
2012-02-06 16:29 1197package cn.ccb.odsbsx.common.ut ... -
java 操作csv文件
2012-02-06 16:28 1405package cn.ccb.odsbsx.common.ut ... -
Java 表单提交两种方式(网上整理)
2012-01-07 15:01 3031GET与POST的区别: 一、Get是从服务器上 ... -
java压缩文件或文件夹
2011-12-31 08:59 1138/** * @param inputFilePath ... -
分享java解析XML文件(来源于网上)
2011-12-25 15:00 10921.介绍 1)DOM(JAXP ... -
汉诺塔java算法
2011-12-23 16:15 1957package wgy; import java.io.Bu ... -
java最大子序列和算法分析
2011-12-23 15:28 2022/** * 算法一 */ public int ma ... -
java实现全排列
2011-12-21 09:16 1043package wgy; import java.util. ... -
java SSH面试资料
2011-12-20 10:15 2824Java---SSH(MVC) 1. 谈谈你mvc ... -
spring面试资料
2011-12-20 10:11 1780* Spring的优点有什么? 1. Spring是分层的架 ... -
java排序算法
2011-12-18 19:48 16071.判断链表是否存在环型链表 问题:判断一个链表是否存在环,例 ... -
员工在线考试(简单)
2011-11-20 19:14 860一个简单的员工在线考试系统。
相关推荐
### Java中的两种冒泡排序算法 #### 知识点一:基本冒泡排序算法 冒泡排序是一种简单的排序算法,其基本思想是通过不断...在实际应用中,选择合适的排序算法是非常重要的,需要综合考虑数据的特点、性能需求等因素。
在Java编程语言中,图形用户界面...总的来说,"java+GUI界面各种排序算法性能比较"项目是一个结合了基础编程、图形用户界面设计、算法实现和性能分析的综合性学习资源,适合初学者和有经验的开发者进行实践和研究。
29. 排序综合(限1 人完成) 利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 要求: ...PS:采用了直接选择排序算法、冒泡排序、希尔排序、直接插入排序这四种排序算法。
**JAVA版BM25排序模型详解** BM25(Best Match 25)是一种在信息检索领域广泛应用的文档排名算法,它基于TF-IDF(词频-逆文档频率)理论,但进行了改进,能更好地考虑文档长度的影响。在这个JAVA版的实现中,我们...
在Java中,`java.util.Arrays`类提供了`sort()`方法,它可以对整数、浮点数、字符及对象数组进行排序,底层使用的是TimSort,一种稳定的排序算法,综合了插入排序、归并排序和自底向上的归并排序。 这些排序算法各...
Java排序算法是编程中不可或缺的一部分,用于组织和优化数据。以下是对这些算法的详细解析: 1. 插入排序: - 直接插入排序:它通过比较元素并将每个元素插入到正确的位置来工作。时间复杂度为O(n^2),但在最好...
在Java数据结构的学习中,排序算法的...总体来说,这个Java数据结构的大作业是一个综合性的项目,不仅要求实现多种排序算法,还涉及到性能测试和分析,有助于提升对数据结构和算法的理解,以及在实际编程中的应用能力。
这本书的覆盖范围广泛,涉及到算法基础、数据结构、排序算法、查找算法、图论、动态规划等多个重要领域。 在算法基础部分,书中会详细介绍如何用Java实现基本的逻辑控制结构,如循环、条件判断,以及基础的递归思想...
在IT领域,排序算法是计算机科学中的基础概念,特别是在编程语言如Java中,掌握各种排序方法对于提升程序性能至关重要。...在选择排序算法时,应根据数据规模、稳定性需求以及是否允许原地排序等因素综合考虑。
在这个"Java各种排序算法、Java游戏和实例代码集合"中,我们可以深入学习Java编程的核心技术,并通过实践加强理解。以下是一些关键知识点的详细说明: 1. **排序算法**: - **冒泡排序**:是最基础的排序算法之一...
标题 "各种排序算法java实现" 暗示了这篇内容主要关注的是在Java编程语言中实现不同的排序算法。排序算法是计算机科学中的基础概念,它们用于对一组数据进行有序排列,广泛应用于各种数据处理和分析任务。Java作为...
这里我们主要探讨的是使用Java实现的几种经典排序算法,包括直接选择排序、堆排序、冒泡排序、快速排序、直接插入排序、折半插入排序、Shell排序、归并排序、桶式排序和基数排序。这些算法各有特点,适用于不同的...
本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[]...
冒泡排序是一种基础的排序算法,...这个项目不仅涵盖了冒泡排序算法,还涉及到了Java GUI编程、字符串处理、数组操作等多个知识点。通过这样的实践,开发者可以更好地理解和掌握这些概念,并且提升软件开发的综合能力。
其次,算法部分可能会涵盖经典的排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。这些排序算法各有优缺点,理解它们的工作原理和时间复杂度,有助于在实际开发中选择最适合的排序方式。 ...
在“排序综合课程设计”中,学生通常会被要求实现多种排序算法,并对它们进行性能分析。这个项目可以由四个人合作完成,以分担工作量,同时通过团队协作提升沟通与协同能力。 在这个课程设计中,以下几个关键知识点...
常见的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序等。 9. **Overload 和 Override 的区别?Overloaded 的方法是否可以改变返回值的类型?** - Overload(重载)是方法名...
可输入的冒泡排序法~ 综合更改的版本~ java ban
【箱子排序BInSort图形界面演示(JAVA)】 ...总的来说,这个"箱子排序BInSort图形界面演示(JAVA)"项目提供了一个交互式的学习工具,使得复杂的排序算法变得生动有趣,有助于提高编程爱好者和学习者的技能水平。
总的来说,选择合适的排序算法应根据数据特性、稳定性需求和性能要求综合考虑。在处理大量数据时,优先考虑时间复杂度较低的算法;在对稳定性有特定要求的情况下,应选用稳定的排序算法。了解各种排序算法的特性和...