手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

用Java实现几种常见的排序算法

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

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];

SortUtil.swap(data,pivotIndex,j);

file://partition
l=i-1;
r=j;
do{
while(data[ l]<pivot);
while((r!=0)&&(data[--r]>pivot));
SortUtil.swap(data,l,r);
}
while(l<r);
SortUtil.swap(data,l,r);
SortUtil.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;
}

}
file://new InsertSort().sort(data);
insertSort(data);
}
/**
* @param data
*/
private void 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--){
SortUtil.swap(data,j,j-1);
}
}
}

}

归并排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class MergeSort implements SortUtil.Sort{

/* (non-Javadoc)
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {
int[] temp=new int[data.length];
mergeSort(data,temp,0,data.length-1);
}

private void mergeSort(int[] data,int[] temp,int l,int r){
int mid=(l r)/2;
if(l==r) return ;
mergeSort(data,temp,l,mid);
mergeSort(data,temp,mid 1,r);
for(int i=l;i<=r;i ){
temp[i]=data[i];
}
int i1=l;
int i2=mid 1;
for(int cur=l;cur<=r;cur ){
if(i1==mid 1)
data[cur]=temp[i2 ];
else if(i2>r)
data[cur]=temp[i1 ];
else if(temp[i1]<temp[i2])
data[cur]=temp[i1 ];
else
data[cur]=temp[i2 ];
}
}

}

改进后的归并排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class ImprovedMergeSort implements SortUtil.Sort {

private static final int THRESHOLD = 10;

/*
* (non-Javadoc)
*
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {
int[] temp=new int[data.length];
mergeSort(data,temp,0,data.length-1);
}

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];
}
}
}

/**
* @param data
* @param l
* @param i
*/
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--){
SortUtil.swap(data,j,j-1);
}
}
}
}

堆排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class HeapSort implements SortUtil.Sort{

/* (non-Javadoc)
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!