快速排序算法:
- 实现:先在数组中选择一个数字(默认首位数字),接下来把数组中的数字分为两部分,比选择数字小的移到数组的左边,比选择数字大的移到数组右边。递归进行,知道数组有序。
- 复杂度:平均复杂度O(nlogn) 最坏复杂度O(n^2),体现在数组基本有序,每次选取最后一个作为比较数字的情况。
代码:
import java.util.Random;
public class Solution {
public static int Partition1(int[] data, int l, int r) { // 方法1
int tmp = data[l]; // swap(data[l],data[r])
data[l] = data[r];
data[r] = tmp;
int mid = l - 1;
for (int index = l; index < r; index++) {
if (data[index] < data[r]) {
mid++;
if (mid != index) {
tmp = data[index]; // swap(data[index],data[mid])
data[index] = data[mid];
data[mid] = tmp;
}
}
}
mid++;
tmp = data[mid]; // swap(data[mid],data[r])
data[mid] = data[r];
data[r] = tmp;
return mid;
}
public static int Partition2(int[] data, int l, int r) { // 方法2
int x = data[l];
while (l < r) {
while (l < r && data[r] >= x) {
r--;
}
data[l] = data[r];
while (l < r && data[l] <= x) {
l++;
}
data[r] = data[l];
}
data[l] = x;
return l;
}
public static void QuickSort(int[] data, int l, int r) {
if (l >= r) {
return;
}
int mid = Partition1(data, l, r);
//int mid = Partition2(data, l, r);
QuickSort(data, l, mid - 1);
QuickSort(data, mid + 1, r);
}
public static void main(String[] args) {
int[] data = new int[10];
Random random = new Random();
for (int i = 0; i < 10; i++) {
data[i] = random.nextInt(10);
}
System.out.printf("原数组:");
for (int d : data) {
System.out.printf("%d ", d);
}
QuickSort(data, 0, data.length - 1);
System.out.println();
System.out.printf("排序后:");
for (int d : data) {
System.out.printf("%d ", d);
}
}
}

京公网安备 11010502036488号