排序
计算机领域最基础的操作:排序 http://en.wikipedia.org/wiki/Sorting_algorithm。

- 冒泡排序:http://en.wikipedia.org/wiki/Bubble_sort
- 选择排序:http://en.wikipedia.org/wiki/Selection_sort
- 插入排序:http://en.wikipedia.org/wiki/Insertion_sort
- 希尔排序:http://en.wikipedia.org/wiki/Shellsort
- 归并排序:http://en.wikipedia.org/wiki/Merge_sort
- 快速排序:http://en.wikipedia.org/wiki/Quicksort
import java.util.Scanner;
public class Sort {
public static void bubbleSort(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (less(a[j], a[i])) {
exch(a, i, j);
}
}
}
}
public static void selectSort(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
int min = i;
for (int j = i + 1; j < a.length; j++) {
if (less(a[j], a[min])) {
min = j;
}
}
exch(a, i, min);
}
}
public static void insertionSort(Comparable[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = i; (j > 0) && (less(a[j], a[j - 1])); j--) {
exch(a, j, j - 1);
}
}
}
public static void insertionSort2(Comparable[] a) {
Comparable key;
for (int i = 1; i < a.length; i++) {
int j = i - 1;
key = a[i];
while((j > 0) && less(key, a[j])) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = key;
}
}
public static void shellSort(Comparable[] a) {
int h = 1;
while (h < a.length/3) {
h = 3*h + 1;
}
while (h >= 1) {
for (int i = h; i < a.length; i++) {
for (int j = i; (j >= h) && (less(a[j], a[j - h])); j -= h) {
exch(a, j, j - h);
}
}
h = h/3;
}
}
private static void merge(Comparable[] a, int lo, int mid, int hi) {
Comparable[] aux = new Comparable[a.length];
for (int k = lo; k <= hi; k++) {
aux[k] = a[k];
}
int i = lo, j = mid + 1;
for (int k = lo; k <= hi; k++) {
if (i > mid) {
a[k] = aux[j++];
} else if (j > hi) {
a[k] = aux[i++];
} else if (less(aux[j], aux[i])) {
a[k] = aux[j++];
} else {
a[k] = aux[i++];
}
}
}
private static void mergesort(Comparable[] a, int lo, int hi) {
if (hi <= lo) {
return;
}
int mid = lo + (hi - lo)/2;
mergesort(a, lo, mid);
mergesort(a, mid + 1, hi);
merge(a, lo, mid, hi);
}
public static void mergeSort(Comparable[] a) {
mergesort(a, 0, a.length - 1);
}
private static void quicksort(Comparable[] a, int lo, int hi) {
if (hi <= lo)
return;
int j = partition(a, lo, hi);
quicksort(a, lo, j - 1);
quicksort(a, j + 1, hi);
}
private static int partition(Comparable[] a, int lo, int hi) {
int i = lo, j = hi + 1;
Comparable v= a[lo];
while (true) {
while (less(a[++i], v)) {
if (i == hi)
break;
}
while (less(v, a[--j])) {
if (j == lo)
break;
}
if (i >= j)
break;
exch(a, i, j);
}
exch(a, lo, j);
return j;
}
public static void quickSort(Comparable[] a) {
quicksort(a, 0, a.length - 1);
}
private static boolean less(Comparable m, Comparable n) {
return m.compareTo(n) < 0;
}
private static void exch(Comparable[] a, int i, int j) {
Comparable tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
private static void show(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
System.out.println(a[i] + " ");
}
System.out.println();
}
public static boolean isSorted(Comparable[] a) {
for (int i = 1; i < a.length; i++) {
if (less(a[i], a[i - 1])) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer[] a = {1,4,3,2,66,333,56,3,112,33333,43};
quickSort(a);
assert isSorted(a);
show(a);
}
}
-------------------------------
问道,修仙
-------------------------------
浙公网安备 33010602011771号