1.快排
原理
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
public class KuaiPai {
public static void main(String[] args) {
int[] array = {6,5,7,3,8,1,0,2,9,4};
quickSort(array, 0, array.length-1);
System.out.println(Arrays.toString(array));
}
public static void quickSort(int[] array, int l, int r) {
if (l >= r) {
return;
}
int base = array[l];
int i = l + 1;
int j = r;
while (true) {
while (i < j && array[i] < base) {
i++;
}
while (j > i && array[j] > base) {
j--;
}
int temp = array[i];
array[i] = array[j];
array[j] = temp;
if (i == j) {
break;
}
}
if(array[i] > base) {
i--;
}
array[l] = array[i];
array[i] = base;
quickSort(array, l, i-1);
quickSort(array, i+1, r);
}
}
2.希尔排序
原理
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
public class Xierpaixu2 {
public static void sort(int[] array) {
// 希尔排序的增量
int d = array.length;
while (d > 1) {
// 使用希尔增量的方式,即每次折半
d = d / 2;
for (int x = 0; x < d; x++) {
for (int i = x + d; i < array.length; i = i + d) {
int temp = array[i];
int j;
for (j = i - d; j >= 0 && array[j] > temp; j = j - d) {
array[j + d] = array[j];
}
array[j + d] = temp;
}
}
}
}
public static void main(String[] args) {
int[] array = { 5, 3, 9, 12, 6, 1, 7, 2, 4, 11, 8, 10 };
sort(array);
System.out.println(Arrays.toString(array));
}
}