(六)归并排序
(七)快速排序
希尔排序相当与直接插入排序的升级,堆排序相当于简单选择排序的升级,而接下来要介绍的快速排序其实是冒泡排序的升级。
快速排序的基本思想是:每次在待排数组中选定一个基准元素,通过一趟排序,使得位于基准元素右侧的元素均大于此基准元素,基准元素左侧的元素均小于此基准元素。这样再分别对基准元素左右侧的元素分别进行排序,直至排序完成。老规矩,先上代码:
public void quikSort(int[] array) {
qSort(array, 0, array.length - 1);
}
private void qSort(int[] array, int low, int high) {
if (low < high) {
int com = partition(array, low, high); //com为选定的基准元素的位置;
qSort(array, low, com - 1); //分别对左右序列进行快速排序;
qSort(array, com + 1, high);
}
}
private int partition(int[] array, int low, int high) {
int temp = array[low]; //每次选第一个元素作为基准元素;
while (low < high) {
while (low < high && array[high] >= temp)
high--;//找到该移动的高位元素(此时基准元素在low处),与基准元素交换(基准元素在high处);
swap(array, low, high);
while (low < high && array[low] <= temp)
low++;//找到该移动低位元素,与基准元素交换(基准元素又回到low处);
swap(array, low, high);
}
return low;
}
最终,实现了数组的排序。