(一)快速排序:
1、选择其中一个元素作为枢纽(此处选择第一个元素),移动元素使得枢纽元素左边的元素<=枢纽元素<=枢纽元素右边的元素
2、递归
代码:
public static void quickSort(int array[], int left, int right) {
if (left < right) {
int pivotIndex = partion(array, left, right);
quickSort(array, left, pivotIndex - 1);
quickSort(array, pivotIndex + 1, right);
}
}
public static int partion(int array[], int left, int right) {
int i = left;
int j = right;
int pivot = array[left];
while (i < j) {
while (i < j && array[j] >= pivot) {
--j;
}
array[i] = array[j];
while (i < j && array[i] <= pivot) {
++i;
}
array[j] = array[i];
}
array[i] = pivot;
return i;
}
(二)冒泡排序
public static void BubbleSort(int[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1])
swap(array, j, j + 1);
}
}
}
private static void swap(int[] array, int i, int j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
(三)直接插入排序
public static void insertSort(int a[], int n) {
for (int i = 1; i < n; i++) {
if (a[i] < a[i - 1]) { // 若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
int j = i - 1;
int x = a[i]; // 复制为哨兵,即存储待排序元素
a[i] = a[i - 1]; // 先后移一个元素
while ((j >= 0) && x < a[j]) { // 查找在有序表的插入位置
a[j + 1] = a[j];
j--; // 元素后移
}
a[j + 1] = x; // 插入到正确位置
}
}
}