java快速排序的思路与算法
面试的时候Arrays.sort ) )有时我会问,是怎么实现的,我以前不知道是什么,最近下单看了一下。 直接吓傻了,
//看到这个时候还很淡泊,可怕的事情来了。
publicstaticvoidsort(int[]a ) {
dualpivotquicksort.sort(a,0,a.length-1,null,0,0 );
}
进去一看,突然没有了看的欲望。
DualPivotQuicksort//共3079行
请从网上查找分析流程图。 (最好从算法上看流程图。 照片的URL来自http://www.tui cool.com/articles/bfy7NZ ) (谢谢) )
因为我们不能马上写这样的代码,所以首先理解各个算法的实现是最基本的,目标是之后自己集成一个。
这次实现的快速排序算法(DualPivotQuicksort类名的一半是) :
公共类排序{
静态布尔型(intb,intb ) {
returna
}
staticvoidexch(intarray[],inti,intj ) {
inttemp=array[i];
array[i]=array[j];
array[j]=temp;
}
staticvoidcomexch(intarray[],inti,intj ) {
if(less(Array[j],array[i] ) )
Exch (阵列,I,j );
}
//扫描
staticintpartition(inta[],intl,intr ) {
inti=l-1,j=r;
intv=a[r];
for (; () )。
wile(less ) a[I],v );
while(less ) v,a(-j ) ) ) ) ) )
if(j==l ) break;
}
if(I=j ) break;
exch(a,I,j );
}
exch(a,I,r );
returni;
}
//快速排序
staticvoidquicksort(inta[],intl,intr ) {
if(r=L )返回;
inti=partition(a,l,r );
快速排序(a,l,i-1 );
快速排序(a,i 1,r );
}
publicstaticvoidmain (string args [ ] ) {
intarray [ ]={ 1,3,2,5,4,9,8,0 };
快速排序(阵列,0,7 );
集成:阵列(for ) )。
system.out.println(n;
}
}
}
将排序的数组设为A[0]……A[N-1]。 首先,选择任意数据(通常选择数组中的最后一个数字)作为关键数据,将所有小于的数字放在前面,将所有大于的数字放在后面。 这个过程称为快速排序。 值得注意的是,快速排序不是稳定的排序算法。 这意味着多个相同值的相对位置在算法结束时可能会发生变动。
这是最简单的快排,只是班的一半。 如果知道了另一半为什么要按轴分开,就补充算法。