第一种(传统方式):
public class Application { public static void qSort(int[] arr, int head, int tail) { if (head >= tail || arr == null || arr.length <= 1) { return; } int i = head, j = tail, pivot = arr[(head + tail) / 2]; while (i <= j) { while (arr[i] < pivot) { ++i; } while (arr[j] > pivot) { --j; } if (i < j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; ++i; --j; } else if (i == j) { ++i; } } qSort(arr, head, j); qSort(arr, i, tail); } public static void main(String[] args) { int[] arr = new int[]{1, 4, 8, 2, 55, 3, 4, 8, 6, 4, 0, 11, 34, 90, 23, 54, 77, 9, 2, 9, 4, 10}; qSort(arr, 0, arr.length - 1); String out = ""; for (int digit : arr) { out += (digit + ","); } System.out.println(out); } }第二种:
public
class
A2{
public
static
void
main(String[] args){
int
[] a={
2
,
4
,
6
,
8
,
3
,
6
,
9
,
12
};
doSomething(a,
0
,a.length-
1
);
for
(
int
i=
0
;i<=a.length-
1
;i++)
System.out.print(a[i]+
" "
);
}
private
static
void
doSomething(
int
[] a,
int
start,
int
end){
if
(start<end){
int
p=core(a,start,end);
doSomething(a,start,p-
1
);
doSomething(a,p+
1
,end);
}
}
private
static
int
core(
int
[] a,
int
start,
int
end)
{
int
x=a[end];
int
i=start;
for
(
int
j=start;j<=end-
1
;j++){
if
(a[j]>=x){
swap(a,i,j);
i++;
//交换了几次
}
}
//把最大的放到最后
swap(a,i,end);
//把最大的放到i的位置
return
i;
}
private
static
void
swap(
int
[] a,
int
i,
int
j)
{
int
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}