快速排序

来源:互联网 发布:ai软件卡通图片 编辑:程序博客网 时间:2024/06/01 08:53

亲测可以运行。

简单说一下快排的思想:我给出的快排算法是基于递归的。每次递归都会使一个元素在最终的位置上。算法中,给定两个游标low和heigh,分别指向数组需要排序那段的开始和结尾。每次都是选择array[low]为基准元素进行比较,首先看array[heigh]是否大于基准元素,如果大于就减减,如果小于就跳出小循环,将array[heigh]赋值给array[low],大家不要担心array[low]的被覆盖,因为temp已经记录了array[low]的值了。然后进入第二个小循环,如果array[low]的值大于temp则将array[low]的值赋值给array[heigh],不要忘记赋值之后注意将low和heigh的值做相应的变化哦,比如low++,heigh--。


public class QuickSort {

{
int[] array=DataPrepare();
for(int a : array)
{
System.out.println(a);
}
Quick(array,0,9);
for(int a : array)
{
System.out.println(a);
}
}

public static void Quick(int[] array,int i,int j)
{
System.out.println("i is : "+i);
int temp;//以第一个元素为比较基准
int low=i;
int heigh=j;
if(low>=heigh)
{
return;
}
temp=array[i];
while(low<heigh)
{
while(low<heigh&&temp<=array[heigh])
{
heigh--;
}
if(low<heigh)
{
array[low++]=array[heigh];
}
while(low<heigh&&temp>array[low])
{
low++;
}
if(low<heigh)
{
array[heigh--]=array[low];
}
}
array[low]=temp;
Quick(array,i,low-1);
Quick(array,low+1,j);
}

public static int[] DataPrepare()
{
int[] array=new int[10];
array[0]=6;
array[1]=9;
array[2]=2;
array[3]=3;
array[4]=4;
array[5]=1;
array[6]=12;
array[7]=25;
array[8]=22;
array[9]=18;
return array;
}

}

运行结果如下:






0 0