1 冒泡排序
package com.xianhuii.sort;
import org.junit.Test;
import java.util.Arrays;
public class BubbleSort {
private void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public void sort(int[] arr) {
int len = arr.length;
boolean flag;
for (int i = 1; i < len; i++) {
flag = false;
for (int j = 0; j < len - i; j++) {
if (arr[j] > arr[j + 1]) {
flag = true;
swap(arr, j, j + 1);
}
}
if (!flag) {
break;
}
}
}
@Test
public void test() {
int[] arr = new int[]{4, 5, 6, 3, 2, 1};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}2 选择排序
package com.xianhuii.sort;
import org.junit.Test;
import java.util.Arrays;
public class SelectSort {
private void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public void sort(int[] arr) {
int len = arr.length;
int minIndex = 0;
for (int i = 0; i < len - 1; i++) {
minIndex = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(arr, i, minIndex);
}
}
}
@Test
public void test() {
int[] arr = new int[]{4, 5, 6, 3, 2, 1};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}3 插入排序
package com.xianhuii.sort;
import org.junit.Test;
import java.util.Arrays;
public class InsertSort {
private void insert(int[] arr, int index) {
int len = index - 1;
int target = arr[index];
for (int i = len; i >= 0; i--) {
if (arr[i] > target) {
arr[i + 1] = arr[i];
index = i;
} else {
break;
}
}
if (index != (len + 1)) {
arr[index] = target;
}
}
public void sort(int[] arr) {
int len = arr.length;
for (int i = 1; i < len; i++) {
insert(arr, i);
}
}
@Test
public void test() {
int[] arr = new int[]{4, 5, 6, 3, 2, 1};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}4 希尔排序
package com.xianhuii.sort;
import org.junit.Test;
import java.util.Arrays;
public class ShellSort {
private void insert(int[] arr, int index, int gap) {
int len = index - gap;
int target = arr[index];
for (int i = len; i >= 0; i -= gap) {
if (arr[i] > target) {
arr[i + gap] = arr[i];
index = i;
} else {
break;
}
}
if (index != (len + gap)) {
arr[index] = target;
}
}
private void insertSort(int[] arr, int gap) {
int len = arr.length;
for (int i = 1; i < len; i++) {
insert(arr, i, gap);
}
}
public void sort(int[] arr) {
int len = arr.length;
for (int gap = len / 2; gap >= 1; gap /= 2) {
insertSort(arr, gap);
}
}
@Test
public void test() {
int[] arr = new int[]{8, 9, 1, 7, 6, 5, 3, 4, 2, 0};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}5 快速排序
package com.xianhuii.sort;
import org.junit.Test;
import java.util.Arrays;
public class QuickSort {
private void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
private int partition(int[] arr, int left, int right, int pivot) {
while (left < right) {
while (arr[left] < pivot) {
left++;
}
while (arr[right] > pivot) {
right--;
}
if (left < right) {
swap(arr, left, right);
}
}
return left;
}
private void sort(int[] arr, int left, int right) {
if (left >= right || (left + 1 == right && arr[left] < arr[right])) {
return;
}
int pivot = arr[(left + right) / 2];
int index = partition(arr, left, right, pivot);
sort(arr, left, index - 1);
sort(arr, index, right);
}
public void sort(int[] arr) {
sort(arr, 0, arr.length - 1);
}
@Test
public void test() {
int[] arr = new int[]{4, 3, 0, 2, 7, 1, 6, 5};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}6 归并排序
package com.xianhuii.sort;
import org.junit.Test;
import java.util.Arrays;
public class MergeSort {
private void merge(int[] arr, int left, int right) {
int[] tmp = new int[right - left + 1];
int index = 0;
int mid = (left + right) >> 1;
int l = left;
int r = mid + 1;
while (l <= mid && r <= right) {
if (arr[l] < arr[r]) {
tmp[index++] = arr[l++];
} else {
tmp[index++] = arr[r++];
}
}
while (l <= mid) {
tmp[index++] = arr[l++];
}
while (r <= right) {
tmp[index++] = arr[r++];
}
index = 0;
while (left <= right) {
arr[left++] = tmp[index++];
}
}
private void sort(int[] arr, int left, int right) {
int mid = (left + right) >> 1;
if (left < right) {
sort(arr, left, mid);
sort(arr, mid + 1, right);
merge(arr, left, right);
}
}
public void sort(int[] arr) {
sort(arr, 0, arr.length - 1);
}
@Test
public void test() {
int[] arr = new int[]{11, 8, 3, 9, 7, 1, 2, 5};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}7 基数排序
package com.xianhuii.sort;
import org.junit.Test;
import java.util.Arrays;
public class RadixSort {
public void sort(int[] arr) {
int length = arr.length;
int maxIndex = 0; // 最大值索引
int[][] bucket = new int[10][length]; // 桶
int[] count = new int[10]; // 记录放入个数
int radix = 0;
for (int i = 1; i < length; i++) { // 寻找最大值
if (arr[i] > arr[maxIndex]) {
maxIndex = i;
}
}
int numLen = (arr[maxIndex] + "").length(); // 求出最大值的位数
for (int i = 0, m = 1; i < numLen; i++, m *= 10) {
for (int j = 0; j < length; j++) { // 按顺序入桶
radix = arr[j] / m % 10;
bucket[radix][count[radix]++] = arr[j];
}
int index = 0;
for (int k = 0; k < bucket.length; k++) { // 按顺序出桶
if (count[k] != 0) {
for (int j = 0; j < count[k]; j++) {
arr[index++] = bucket[k][j];
}
count[k] = 0;
}
}
}
}
@Test
public void test() {
int[] arr = new int[]{53, 542, 3, 63, 14, 214, 154, 748, 616};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}
京公网安备 11010502036488号