有几种排序法啊?最近做练习似乎都在用冒泡,其他方法都想不起来了
能顺便给个例子么
能顺便给个例子么
解决方案 »
- 2个SOCKET问题
- 简单聊天记录赛选
- Action提交后,服务器是否要重起Tomcat才能访问?
- 关于JAVA链表问题LinkedCollection类中的protected static class Entry
- 测试是否可以成功登陆邮箱
- Java基础问题
- 请问为什么这里的getWidth数值为零?
- 怎么判断2个BufferedImage 对象是否保存的图像相同?
- 关于Class.forName()
- jxl不去读取已经读取过的数据
- java 怎么去生成短格式的XML文件<Allow value="中文"></Allow >改成<Allow value="中文"/>
- 请问:Bruce Eckel哪个大学毕业的??谢谢
{
long time1,time2;
int c;
time1=System.currentTimeMillis();
// /*冒泡排序*/
// for(int i=a.length-1;i>1;i--)
// {
// for(int j=0;j<i;j++)
// {
//
// if(a[j]<a[j+1])
// {
// c=a[j];
// a[j]=a[j+1];
// a[j+1]=c;
// }
// }
// }
// /*选择排序*/
// int pos=0;
// for(int i=0;i<a.length-2;i++)
// {
// for(int j=i;j<a.length-1;j++)
// {
// if(a[pos]<a[j+1])
// pos=j+1;
// }
// c=a[i];
// a[i]=a[pos];
// a[pos]=c;
// pos=i+1;
// }
// /*插入排序*/
// for(int i=1;i<a.length;i++)
// {
// c=a[i];
// int m=i-1;
// while(m>=0&&a[m]<c)
// {
// a[m+1]=a[m];
// m--;
// }
// a[m+1]=c;
// }
// /*希尔排序*/
// int h=1;
// int m=0;
// while(3*h+1<a.length)
// h=3*h+1;
// while(h>0)
// {
// for(int i=h;i<a.length;i++)
// {
// c=a[i];
// m=i-h;
// while(m>=0&&a[m]<c)
// {
// a[m+h]=a[m];
// m-=h;
// }
// a[m+h]=c;
//
// }
// h=(h-1)/3;
// }
/*快速排序*/
provide(a,0,a.length-1);
time2=System.currentTimeMillis();
System.out.println("time:"+(time2-time1));
}
/*递归调用划分*/
public static void provide(int[] a,int left,int right)
{
try
{
if(right<=left)
return;
else
{
/*设置基准点*/
int prov=a[right];
/*取得划分中断点*/
int par=partitionIt(a,left,right,prov);
/*对划分后的两边再次划分*/
provide(a,left,par-1);
provide(a,par+1,right);
}
}
catch(Exception e)
{
System.out.println("eer:"+left+"."+right);
}
}
/*划分算法*/
public static int partitionIt(int[] a,int left,int right,int prov)
{
/*设置左右端点的指针*/
int leftP=left-1;
int rightP=right;
int c;//用于交换的中间变量
/*当左右指针未相遇时继续操作*/
while(leftP<rightP)
{
/*当左指针的数据小于基准值时跳出*/
while(leftP<a.length-1&&a[++leftP]>prov)
;
/*当右指针的数据大于基准值时跳出*/
while(rightP>leftP&&a[--rightP]<prov)
;
/*左右指针都停下时交换数据*/
c=a[leftP];
a[leftP]=a[rightP];
a[rightP]=c;
}
/*划分结束,将基准点与指针的相遇点交换*/
c=a[rightP];
a[rightP]=a[right];
a[right]=c;
return leftP;
}我也是看别人的。我自己感觉只要你把冒泡用明白了,就行了,其它的了解就可以。