插入排序
public static void main(String[] args) {
int[] a = new int[] { 1, 3, 6, 4, 2, 0, 91, 68, 33 };
if (a.length >= 2) {
for (int i = 1; i < a.length; i++) {
int j = i - 1;
int x = a[i];
while (j >= 0 && a[j] > x) {
a[j + 1] = a[j];
a[j] = x;
j--;
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
分治排序
(我不知道是不是叫这个名字,运行进度可以debug看一下就容易理解了
public static void main(String[] args) {
int[] a = new int[] { 70, 2, 6, 8, 7, 9, 5, 99, 87, 5, 46, 526, 5, 26 };
sort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
}
public static void sort(int[] arr, int begin, int end) {
int a = begin;
int b = end;
if (a >= b) {
return;
}
int x = arr[a];
while (a < b) {
while (arr[b] >= x && a < b)
b--;
if (a < b) {
arr[a] = arr[b];
a++;
}
while (arr[a] <= x && a < b)
a++;
if (a < b) {
arr[b] = arr[a];
b--;
}
}
arr[a] = x;
sort(arr, begin, a - 1);
sort(arr, a + 1, end);
}
冒泡排序
public static void main(String[] args) {
int a[] = new int[] { 1, 2, 1, 5, 33, 5, 456, 3, 3, 6 };
maopao(a);
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
}
public static void maopao(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j + 1] < arr[j]) {
int n = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = n;
}
}
}
}
选择排序
public static void main(String[] args) {
int a[] = new int[] { 1, 2, 3, 5, 4, 5, 8, 4, 53, 21, 1, 33, 5 };
xuanze(a);
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
}
public static void xuanze(int arr[]) {
for (int i = 0; i < arr.length; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (min != i) {
int n = arr[min];
arr[min] = arr[i];
arr[i] = n;
}
}
}
归并排序
public static void main(String[] args) {
int a[] = new int[] { 1, 7, 3, 5, 4 };
mergesort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
}
public static void mergesort(int[] a, int s, int e) {
int m = (e + s) >> 1;
if (e > s) {
mergesort(a, s, m);
mergesort(a, m + 1, e);
}
merge(a, s, m, e);
}
public static void merge(int[] arr, int s, int m, int e) {
int[] n = new int[(e - s) + 1];
int l = s;
int r = m + 1;
int i = 0;
while (s <= m && r <= e) {
if (arr[l] < arr[r]) {
n[i++] = arr[l++];
} else {
n[i++] = arr[r++];
}
}
while (l <= m) {
n[i++] = arr[l++];
}
while (r <= e) {
n[i++] = arr[r++];
}
for (int j = 0; j < n.length; j++) {
arr[s + j] = n[j];
}
}
像分治递归那一部分想不过来的可以用eclipse的debug看一下