您的位置:首页 > 其它

各种排序算法的总结

2015-03-22 20:13 183 查看
一、交换排序
1. 冒泡排序法
public static void bubbleSort(Object a[],int n)
{
if(n>a.length){
System.out.printf("êènóDó£í£13ìDò£");
System.exit(1);
}
for(int i=1;i<n;i++)
{
boolean flag=false;
for(int j=n-1;j>=i;j--)
{
if(((Comparable)a[j]).compareTo(a[j-1])<0){
Object x=a[j];
a[j]=a[j-1];
a[j-1]=x;
flag=true;
}
}
if(flag==false) return;
}
}
2. 快速排序法

public static int partition(Object a[],int s,int t)
{
int i=s,j=t;
Object x=a[i++];
while(i<=j){
while(i<=j&&((Comparable)a[i]).compareTo(x)<=0) i++;
while(i<=j&&((Comparable)a[j]).compareTo(x)>=0) j--;
if(i<j){
Object temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
}
}
a[s]=a[j];a[j]=x;
return j;
}
public static void quickRecursion(Object a[],int s,int t)
{
int j=partition(a,s,t);
if(s<j-1) quickRecursion(a,s,j-1);
if(j+1<t) quickRecursion(a,j+1,t);
}
public static void quickSort(Object a[],int n)
{
if(n>a.length) {System.out.println("nμóDó£í£1DD£"); system.exit(1);}
quickRecursion(a,0,n-1);
}
二、 插入排序法

public static void insertSort(Object[] a,int n)
{
if(n>a.length)
{
System.out.println("n值有误,停止执行!");
System.exit(1);
}
for(int i=1;i<n;i++)
{
Object x=a[i];
int j;
for(j=i-1;j>=0;j--)
{
if(((Comparable)x).compareTo(a[j])<0)
a[j+1]=a[j];
else break;
}
a[j+1]=x;
}
}
三、选择排序
public static void selectSort(Object []a,int n)
{
if(n>a.length)
{
System.out.println("n值有误,停止执行!");
System.exit(1);
}
for(int i=1;i<=n-1;i++)
{
int k=i-1;
for(int j=i;j<=n-1;j++)
{
if(((Comparable)a[j]).compareTo(a[k])<0)
k=j;

}
if(k!=i-1)
{
Object x=a[i-1];
a[i-1]=a[k];
a[k]=x;
}
}
}
四、归并排序
public static void twoMerge(Object []a,Object []r,int s,int m,int t)
{
int i,j,l;
i=s;j=m+1;k=s;
while(i<m&&j<=t)
{
if(((Comparable)a[i]).compareTo(a[j])<=0)
{
r[k]=a[i];i++;k++;
}
else
{
r[k]=a[j];j++;k++;
}
}
while(i<=m)
{
r[k]=a[i];i++;k++;
}
while(j<=t)
{
r[k]=a[j];
j++;k++;
}
}
public static void mergePass(Object []a,Objcet []r,int n,int len)
{
int p=0;
while(p+2*len-1<n-1)
{
twoMerge(a,r,p,p+len-1,p+2*len-1);
p+=2*len;
}
if(p+len-1<n-1)
twoMerge(a,r,p,p+len-1,n-1);
else
for(int i=p;i<=n-1;i++) r[i]=a[i];
}
public static void mergeSort(Object []a,int n)
{
Object []r=new Object
;
int len=1;
while(len<n)
{
mergePass(a,r,n,len);
len*=2;
mergePass(r,a,n,len);
len*=2;
}
}


本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1623132
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: