您的位置:首页 > 编程语言 > Java开发

java 快速排序

2017-07-15 16:54 232 查看
方法一 单位交换
/*
从前往后开始,
令左边第一个元素为标志位,先取右边比标志位小的第一个数,交换位置
然后从左边取比标志位大的第一个数,交换位置,一次累计
*/
class QuickShort
{
public static int j=1;
public static void main(String[] args)
{
int[] a = new int[]{2,4,9,3,6,7,1,5};
Qshort(a,0,a.length-1);
//		for (int x:a )
//		{
//			System.out.print(x+" ");
//		}
}
public static int quickshort(int[] a,int start,int end)
{

int base=a[start];
while (start<end)
{	//判断右边比标志位小的元素
while (start<end && a[end]>=base)
{
end--;
}
if (start<end)
{
int temp=a[start];
a[start]=a[end];
a[end]=temp;
start++;
}	//判断左边比标志位大的元素
while(start<end && a[start]<=base)
{
start++;
}
if (start<end)
{
int temp=a[start];
a[start]=a[end];
a[end]=temp;
end--;
}
}
System.out.print("第"+j+"次排序后结果为:\t");
for (int x:a )
{
System.out.print(x+" ");
}
j++;
System.out.println();
return start;
}
public static void Qshort(int[] a,int start,int end)
{
if (start>=end)
{
return;
}
else
{
int point=quickshort(a,start,end);
Qshort(a,start,point-1);
Qshort(a,point+1,end);
}
}
}
方法二:双位交换
/* 取中间元素为标志位
找到左边第一个比标志位大的第一个数与右边比标志位小的第一个数,交换位置,循环
*/

class QuickShort_2
{
public static int j=1;
public static void main(String[] args)
{
int[] a = new int[]{2,4,9,3,6,7,1,5};
Qshort(a,0,a.length-1);
}
public static int quickshort(int[] a,int start,int end)
{
int mid=(start+end)/2;
int base=a[mid];
while (start<end)
{
while (start<end && a[end]>base)
{
end--;
}
while(start<end && a[start]<base)
{
start++;
}
if (start<end)
{
int temp=a[start];
a[start]=a[end];
a[end]=temp;
}
}
System.out.print("第"+j+"次排序后结果为:\t");
for (int x:a )
{
System.out.print(x+" ");
}
j++;
System.out.println();
return start;
}
public static void Qshort(int[] a,int start,int end)
{
if (start>=end)
{
return;
}
else
{
int point=quickshort(a,start,end);
Qshort(a,start,point-1);
Qshort(a,point+1,end);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 快速排序