一、冒泡排序
package com.paixu;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = new int[] { 5, 7, 2, 15, 6, 9, 7, 3, 6, 8 };
System.out.println("排序前:" + Arrays.toString(arr));
bubbleSort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
public static void bubbleSort(int[] arr) {
int k = 1;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("第" + k + "次排列结果为:" + Arrays.toString(arr));
k++;
}
}
}
二、快速排序
package com.paixu;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[] { 5, 7, 2, 15, 6, 9, 7, 3, 6, 8, 3, 5, 6, 4, 11, 22, 31, 0, 2, 5, 14 };
System.out.println("排序前:" + Arrays.toString(arr));
quickSort(arr, 0, arr.length - 1);
System.out.println("排序后:" + Arrays.toString(arr));
}
public static void quickSort(int[] arr, int start, int end) {
int k = 1;
if (start < end) {
int stard = arr[start];
int low = start;
int high = end;
while (low < high) {
while (low < high && stard <= arr[high]) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= stard) {
low++;
}
arr[high] = arr[low];
}
arr[low] = stard;
quickSort(arr, start, low);
quickSort(arr, low + 1, end);
}
}
}
三、插入排序
package com.paixu;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int arr[] = new int[] { 5, 3, 6, 7, 8, 9, 5, 1, 1, 21, 23, 51, 41, 17, 4 };
System.out.println("排序前:" + Arrays.toString(arr));
insertSort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
public static void insertSort(int arr[]) {
int k = 1;
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) {
int temp = arr[i];
int j;
for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
System.out.println("第" + k + "次排列结果为:" + Arrays.toString(arr));
k++;
}
}
}
四、希尔排序
package com.paixu;
import java.util.Arrays;
public class ShellSort {
public static void main(String[] args) {
int arr[] = new int[] { 5, 3, 6, 7, 8, 9, 5, 1, 1, 21, 23, 51, 41, 17, 4 };
System.out.println("排序前:" + Arrays.toString(arr));
shellSort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
public static void shellSort(int[] arr) {
int k = 1;
for (int d = arr.length / 2; d > 0; d /= 2) {
for (int i = d; i < arr.length; i++) {
for (int j = i - d; j >= 0; j -= d) {
if (arr[j] > arr[j + d]) {
int temp = arr[j];
arr[j] = arr[j + d];
arr[j + d] = temp;
}
}
}
System.out.println("第" + k + "次排列结果为:" + Arrays.toString(arr));
k++;
}
}
}
五、选择排序
package com.paixu;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int arr[] = new int[] { 5, 3, 6, 7, 8, 9, 5, 1, 1, 21, 23, 51, 41, 17, 4 };
System.out.println("排序前:" + Arrays.toString(arr));
selectSort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
public static void selectSort(int[] arr) {
int k = 1;
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
if (i != minIndex) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
System.out.println("第" + k + "次排列结果为:" + Arrays.toString(arr));
k++;
}
}
}
六、归并排序
package com.paixu;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int arr[] = new int[] { 5, 3, 6, 7, 8, 9, 5, 1, 1, 21, 23, 51, 41, 17, 4 };
System.out.println("排序前:" + Arrays.toString(arr));
mergeSort(arr, 0, arr.length - 1);
System.out.println("排序后:" + Arrays.toString(arr));
}
public static void mergeSort(int[] arr, int low, int high) {
int middle = (high + low) / 2;
if (low < high) {
mergeSort(arr, low, middle);
mergeSort(arr, middle + 1, high);
merge(arr, low, middle, high);
}
}
public static void merge(int[] arr, int low, int middle, int high) {
int[] temp = new int[high - low + 1];
int i = low;
int j = middle + 1;
int index = 0;
while (i <= middle && j <= high) {
if (arr[i] <= arr[j]) {
temp[index] = arr[i];
i++;
} else {
temp[index] = arr[j];
j++;
}
index++;
}
while (j <= high) {
temp[index] = arr[j];
j++;
index++;
}
while (i <= middle) {
temp[index] = arr[i];
i++;
index++;
}
for (int k = 0; k < temp.length; k++) {
arr[k + low] = temp[k];
}
}
}
七、基数排序
package com.paixu;
import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int[] arr = new int[] { 1, 58, 156, 68, 445, 2221, 485, 45, 469, 574, 11, 322, 3, 45, 68, 45 };
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int[] arr) {
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
int maxLength = (max + "").length();
int[][] temp = new int[10][arr.length];
int[] counts = new int[10];
for (int i = 0, n = 1; i < maxLength; i++, n *= 10) {
for (int j = 0; j < arr.length; j++) {
int ys = arr[j] / n % 10;
temp[ys][counts[ys]] = arr[j];
counts[ys]++;
}
int index = 0;
for (int k = 0; k < counts.length; k++) {
if (counts[k] != 0) {
for (int l = 0; l < counts[k]; l++) {
arr[index] = temp[k][l];
index++;
}
counts[k] = 0;
}
}
}
}
}
八、队列实现基数排序
1.队列
package com.paixu;
public class MyQueue {
int[] elements;
public MyQueue() {
elements = new int[0];
}
public String show() {
String stringQueue = "";
for (int i = 0; i < elements.length; i++) {
stringQueue += elements[i] + " ";
}
return stringQueue;
}
public void add(int element) {
int newArr[] = new int[elements.length + 1];
for (int i = 0; i < elements.length; i++) {
newArr[i] = elements[i];
}
newArr[elements.length] = element;
elements = newArr;
}
public int poll() {
int element = elements[0];
int[] newArr = new int[elements.length - 1];
for (int i = 0; i < newArr.length; i++) {
newArr[i] = elements[i + 1];
}
elements = newArr;
return element;
}
public boolean isEmpty() {
return elements.length == 0;
}
}
2.排序
package com.paixu;
import java.util.Arrays;
public class RadixMyQueueSort {
public static void main(String[] args) {
int[] arr = new int[] { 1, 58, 156, 68, 445, 2221, 485, 45, 469, 574, 11, 322, 3, 45, 68, 45 };
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int[] arr) {
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
int maxLength = (max + "").length();
MyQueue temp[] = new MyQueue[10];
for (int i = 0; i < temp.length; i++) {
temp[i] = new MyQueue();
}
for (int i = 0, n = 1; i < maxLength; i++, n *= 10) {
for (int j = 0; j < arr.length; j++) {
int ys = arr[j] / n % 10;
temp[ys].add(arr[j]);
}
int index = 0;
for (int k = 0; k < temp.length; k++) {
while (!temp[k].isEmpty()) {
arr[index] = temp[k].poll();
index++;
}
}
}
}
}