public class 插入排序 extends Common {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = new int[]{7, 87, 9, 1, 22,12,18};
insertSort(a);
print(a);
}
public static void insertSort(int[] a){
if(a == null){
return;
}
for(int i = 1; i < a.length; i++){
for(int j = i; j >= 1; j--){
if(a[j] < a[j-1]){
swap(a, j-1 ,j);
}else{
break;
}
}
}
}
}
public class 堆排序 extends Common {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = new int[]{7, 87, 9, 1, 22,12,18};
headSort(a);
print(a);
}
public static void adjust(int[] a, int index, int size) {
int left = 2 * index + 1;
int right = 2 * index + 2;
int maxIndex = index;
if (left < size && a[maxIndex] < a[left]) {
maxIndex = left;
}
if (right < size && a[maxIndex] < a[right]) {
maxIndex = right;
}
if (maxIndex != index) {
swap(a, index, maxIndex);
adjust(a, maxIndex, size);
}
}
public static void buildHead(int[] a, int size) {
int i = size / 2 - 1;
for (; i >= 0; i--) {
adjust(a, i, size);
}
}
public static void headSort(int[] a) {
int size = a.length;
for (; size > 1; size--) {
buildHead(a, size);
swap(a, 0, size-1);
}
}
}
public class 归并排序 extends Common{
public static void main(String[] args) {
int[] a = new int[] { 7, 87, 9, 1, 22, 12, 18 };
sort(a, 0, a.length-1);
print(a);
}
public static void sort(int[] a, int left, int right){
if(a == null || left >= right){
return;
}
int mid = (left + right)/2;
sort(a, left, mid);
sort(a, mid+1, right);
merge(a, left, mid, right);
}
public static void merge(int[] a, int left, int mid, int right){
int[] mergeArray = new int[right - left + 1];
int i = left;
int j = mid + 1;
int k = 0;
while(i <= mid && j <= right){
if(a[i] <= a[j]){
mergeArray[k++] = a[i++];
}else{
mergeArray[k++] = a[j++];
}
}
while(i <= mid){
mergeArray[k++] = a[i++];
}
while(j <= right){
mergeArray[k++] = a[j++];
}
for(int p = 0; p < right - left + 1; p++){
a[p+left] = mergeArray[p];
}
}
}
public class 快速排序 extends Common {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = new int[]{7, 87, 9, 1, 22,12,18};
fastSort(a, 0, a.length-1);
print(a);
}
public static void fastSort(int[] a, int left, int right){
if(a == null || left >= right){
return;
}
int i = left, j = right;
int base = a[i];
while(i < j){
while(i < j && a[j] >= base){
j--;
}
while(i < j && a[i] <= base){
i++;
}
if(i < j){
swap(a, i, j);
}
}
swap(a, i, left);
fastSort(a, left, i-1);
fastSort(a, i+1, right);
}
}
public class 冒泡排序 extends Common {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = new int[] { 7, 87, 9, 1, 22, 12, 18 };
bubbleSort(a);
print(a);
}
public static void bubbleSort(int[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = 1; j < a.length - i; j++) {
if (a[j - 1] > a[j]) {
swap(a, j - 1, j);
}
}
}
}
}
public class 选择排序 extends Common {
/**
* @param args
*/
public static void main(String[] args) {
int[] a = new int[]{7, 87, 9, 1, 22,12,18};
selectSort(a);
print(a);
}
public static void selectSort(int[] a){
if(a == null){
return;
}
int length = a.length;
for(int i = 0; i < length-1; i++){
int minIndex = i;
int min = a[i];
for(int j = i+1; j < length; j++){
if(a[j] < min){
min = a[j];
minIndex = j;
}
}
swap(a, i, minIndex);
}
}
}
外排序:
http://www.cnblogs.com/HappyXie/archive/2012/08/29/2662624.html
http://blog.csdn.net/jethai/article/details/52345310