选择排序
代码实现:
public class SelectionSort {
/**
* 选择排序
*
* @param arr
*/
public static void sort(int arr[]) {
/********** Begin *********/
for(int i = 0;i < arr.length - 1;i++){
for(int j = i+1;j < arr.length;j++){
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
print(arr);
}
/********** End *********/
}
private static void print(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
插入排序
public class InsertionSort {
public static void sort(int arr[]) {
/********** Begin *********/
for (int i = 1;i < arr.length;i++){
int value = arr[i];
int index = i - 1;
while (index >= 0 && value < arr[index]){
arr[index+1] = arr[index];
index--;
}
if (index+1 != i)
arr[index + 1] = value;
print(arr);
}
/********** End *********/
}
private static void print(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
归并排序
public class MergeSort {
/**
* lo, hi都是指下标
*/
public static void sort(int arr[], int lo, int hi) {
if (lo < hi) {
int mid = (lo + hi) / 2;
sort(arr, lo, mid);
sort(arr, mid + 1, hi);
merge(arr, lo, mid, hi);
print(arr);
}
}
private static void merge(int arr[], int p, int q, int r) {
/********** Begin *********/
int[] temp = new int[r-p+1];
int i = p;
int j = q+1;
int k = 0;
while (i<= q && j<= r){
if(arr[i]<arr[j]){
temp[k++] = arr[i++];
}else{
temp[k++] = arr[j++];
}
}
while(i<=q){
temp[k++] = arr[i++];
}
while(j<=r){
temp[k++] = arr[j++];
}
for(int x=0;x<temp.length;x++){
arr[x+p] = temp[x];
}
/********** End *********/
}
private static void print(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
快速排序
public class QuickSort {
public void sort(int arr[], int low, int high) {
/********** Begin *********/
int i = low;
int j = high + 1;
int povit = arr[low];
while (i < j) {
while (j > low && arr[--j] >= povit) ;
while (i < high && arr[++i] <= povit) ;
if (i>=j)break;
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
print(arr);
}
int temp = arr[j];
arr[j] = arr[low];
arr[low] = temp;
print(arr);
if (i > low) sort(arr, low, j - 1);
if (j < high) sort(arr, j + 1, high);
/********** End *********/
}
private static void print(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
堆排序
public class HeapSort {
public static void sort(int arr[]) {
/********** Begin *********/
int parent = 0;
int temp = 0;
for (int i = (arr.length - 1) / 2; i >= 0; i--) {
parent = i;
temp = arr[parent];
int lChild = 2 * parent + 1;
while (lChild < arr.length) {
int rChild = lChild + 1;
if (rChild < arr.length && arr[lChild] < arr[rChild]) lChild++;
if (temp >= arr[lChild]) break;
arr[parent] = arr[lChild];
parent = lChild;
lChild = 2 * lChild + 1;
}
arr[parent] = temp;
}
for (int i = arr.length - 1; i > 0; i--) {
temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
parent = 0;
temp = arr[parent];
int lChild = 2 * parent + 1;
while (lChild < i) {
int rChild = lChild + 1;
if (rChild < i && arr[lChild] < arr[rChild]) lChild++;
if (temp >= arr[lChild]) break;
arr[parent] = arr[lChild];
parent = lChild;
lChild = 2 * lChild + 1;
}
arr[parent] = temp;
print(arr);
}
/********** End *********/
}
private static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}