快速排序
public class Test {
public static void main(String[] args) {
int[] a = {1, 24, 324, 12, 32, 1123, 1};
new QuicklySort().kuaipai(a, 0, a.length - 1);
for (int x : a)
System.out.println(x);
}
}
//快排步骤
/*
1、出口
2、初始化temp、i、j
3、循环直到i=j
4、从右边找小于等于temp
5、从左边找大于等于temp
6、当i==j,将temp置于中间
7、排左边
8、排右边
* */
class QuicklySort {
public void kuaipai(int[] a, int head, int end) {
if (head >= end) return;
int temp = a[head], i = head, j = end;
while (i < j) {
while (i < j && a[j] >= temp) j--;
a[i] = a[j];
while (i < j && a[i] <= temp) i++;
a[j] = a[i];
}
a[i] = temp;
kuaipai(a, head, i - 1);
kuaipai(a, i + 1, end);
}
public void qk(int[] a, int start, int end) {
if (start >= end) return;
int temp = a[start], i = start, j = end;
while (i < j) {
while (i < j && a[j] >= temp)
j--;
a[i] = a[j];
while (i < j && a[i] <= temp)
i++;
a[j] = a[i];
}
a[i] = temp;
qk(a, start, i - 1);
qk(a, i + 1, end);
}
public void qs(int[] arr, int start, int end) {
//出口
if (start >= end) {
return;
}
//取一个数temp
int temp = arr[start];
int i = start, j = end;
//循环直到i==j
while (i < j) {
//从右边找一个比temp小的
while (i < j && arr[j] >= temp)
j--;
if (arr[j] <= temp)
arr[i] = arr[j];
//从左边找一个比temp大的
while (i < j && arr[i] <= temp)
i++;
if (arr[i] >= arr[j])
arr[j] = arr[i];
}
//将temp置于中间
arr[i] = temp;
//qs左边
qs(arr, start, i - 1);
//qs右边
qs(arr, i + 1, end);
}
}