排序-快速排序
主要思路:
分治思想
先将数组打乱
取数组第一个元素k作为比对标准,
将大数组拆分,循环,将大于k的放置于右侧,将小于k的放置于左侧
while(true)
{
while(k>a[++i]);
while(k<a[--j]);
if(i>=j)
break;
swap(a,i,j);
}
swap(a,low,j);
最后将k放入j的位置
接着递归,将数组的a[low]-a[j-1],a[j+1]-a[high]继续重复此步骤,直到直到>=high。
public class Queen8 {
public static void sort(int a[],int start,int end)
{
if(start>=end)
return;
int j=part(a,start,end);
sop(j);
sort(a,start,j-1);
sort(a,j+1,end);
}
public static int part(int a[],int start,int end)
{
int k = a[start];
int i=start,j=end+1;
while(true)
{
while(k>a[++i]); //可以在这里加入限制,防止越界。
while(k<a[--j]);
if(i>=j)
break;
swap(a,i,j);
}
swap(a,start,j);
return j;
}
public static void swap(int []a ,int i,int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
public static void main(String args[])
{
int a [] = {5,10,1,2,3,6,4,7,8,9,0};
sort(a,0,a.length-1);
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+",");
}
}
public static void sop(Object o)
{
System.out.println(o);
}
}