对于快速排序:思想就是选取一个元素(最好选中中点),把比该元素小的放在左边,把比它大的放在右边
返回一个区分值,在将分成的两段继续递归,进而可以得到排序结果
比较少用java写排序程序
此程序先选取最后一个元素作为区分点
将比该元素小的放前面
大的放后面
package one;
import java.lang.Math;;
public class first {
int a[];
public first()
{
a = new int[10];
}
public void swap(int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
public int partition( int p, int r)//j遍历一遍将比a[r]小的放前面,最后返回分段下标
{
int i = p-1;
int j = p;
for (; j < r; j++)
{
if (a[j] < a[r])
{
i++;
swap(i,j);
}
}
swap(i+1,r);
return i+1;
}
public void quicksort(int p, int r)
{
if (p < r)
{
int q = partition(p,r);
String b = p + " " +r;
System.out.println("p->r"+b);
for(int i=p; i < r; i++)
System.out.print(a[i]+" ");
System.out.println();
quicksort(p,q-1);
quicksort(q+1,r);
}
}
void print()
{
int i;
for(i=0; i < 9; i++)
System.out.print(a[i]+" ");
}
public void rand()
{
int i;
for (i=0; i < 10; i++)
a[i] = (int)(Math.random()*100);
}
public static void main(String args[])
{
first f = new first();
f.rand();
f.quicksort(0,9);
f.print();
System.out.println();
}
}
p->r0 9
67 26 58 59 21 28 69 80 77
p->r0 5
26 21 28 59 67
p->r0 1
21
p->r3 5
58 67
p->r4 5
59
p->r7 9
71 77
p->r8 9
77
21 26 28 58 59 67 69 71 77