希尔排序
public class ShellSort {
public static void sort(int[] arr) {
int gap= arr.length/2;
int current;
while (gap > 0) {
for (int i = gap; i < arr.length; i++) {
current=arr[i];
int preindex= i-gap;
while (preindex>=0 && arr[preindex]>current) {
arr[preindex + gap] = arr[preindex];
preindex = preindex - gap;
}
arr[preindex+gap]=current;
}
gap=gap/2;
}
}
public static void main(String[] args) {
int arr[] = new int[]{1, 66, 4, 21, 7, 7, 3, 5, 9, 44, 56, 3, 6, 11, 15, 34, 18, 22};
sort(arr);
for (int a : arr) {
System.out.print(a + " ");
}
System.out.println();
}
}
归并排序
public class MergeSort {
private static void Sort(int[] a, int left, int right) {
if (left >= right)
return;
int mid = (left + right) / 2;
Sort(a, left, mid);
Sort(a, mid + 1, right);
merge(a, left, mid, right);
}
private static void merge(int[] a, int left, int mid, int right) {
int[] tmp = new int[a.length];
int r1 = mid + 1;
int cIndex = left;
int tIndex = 0;
while (left <= mid && r1 <= right) {
if (a[left] <= a[r1])
tmp[tIndex++] = a[left++];
else
tmp[tIndex++] = a[r1++];
}
while (left <= mid) {
tmp[tIndex++] = a[left++];
}
while (r1 <= right) {
tmp[tIndex++] = a[r1++];
}
for (int i = 0; i < tIndex ; i++) {
a[cIndex+i]=tmp[i];
}
}
public static void main(String[] args) {
int arr[] = new int[]{1, 66, 4, 21, 7, 7, 3, 5, 9, 44, 56, 3, 6, 11, 15, 34, 18, 22};
Sort(arr, 0, arr.length - 1);
for (int a : arr) {
System.out.print(a + " ");
}
System.out.println();
}
}