1、冒泡排序
// 冒泡排序
private void bubbleSort(int[] nums) {
int n = nums.length;
boolean flag = false;
for(int i=0; i<n; i++) {
if(flag) break;
flag = true;
for(int j=1; i+j<n; j++) {
if(nums[j-1] > nums[j]) {
swap(nums, j-1, j);
flag = false;
}
}
}
}
2、选择排序
// 选择排序
private void selectionSort(int[] nums) {
int n = nums.length;
for(int i=0; i<n; i++) {
int t = i;
for(int j=i+1; j<n; j++) {
if(nums[t] > nums[j]) {
t = j;
}
}
swap(nums, i, t);
}
}
3、插入排序
// 插入排序
private void insertionSort(int[] nums) {
int n = nums.length;
for(int i=1; i<n; i++) {
int j=i, t=nums[j];
while(j-1 >= 0 && nums[j-1] > t) {
nums[j] = nums[j-1];
j -= 1;
}
nums[j] = t;
}
}
4、希尔排序
// 希尔排序
private void shellSort(int[] nums) {
int n = nums.length;
for(int i=n/2; i>0; i/=2) {
for(int j=i; j<n; j++) {
int t = nums[j];
while(j-i >= 0 && nums[j-i] > t) {
nums[j] = nums[j-i];
j -= i;
}
nums[j] = t;
}
}
}
5、归并排序
// 归并排序
private void mergeSort(int[] nums) {
mergeSort(nums, 0, nums.length-1);
}
private void mergeSort(int[] nums, int l, int r) {
if(l >= r) return;
int mid = (l+r) >> 1;
mergeSort(nums, l, mid);
mergeSort(nums, mid+1, r);
merge(nums, l, mid, r);
}
private void merge(int[] nums, int l, int mid, int r) {
int[] tmp = new int[r-l+1];
int k=0, i=l, j=mid+1;
while(i <= mid && j <= r) {
if(nums[i] > nums[j]) tmp[k++] = nums[j++];
else tmp[k++] = nums[i++];
}
while(i <= mid) {
tmp[k++] = nums[i++];
}
while(j <= r) {
tmp[k++] = nums[j++];
}
System.arraycopy(tmp, 0, nums, l, r + 1 - l);
}
6、快速排序
// 快速排序
private void quickSort(int[] nums) {
quickSort(nums, 0, nums.length-1);
}
private void quickSort(int[] nums, int l, int r) {
if(l >= r) return;
int t=nums[l], i=l, j=r;
while(i < j) {
while(i < j && nums[j] >= t) j--;
nums[i] = nums[j];
while(i < j && nums[i] <= t) i++;
nums[j] = nums[i];
}
nums[i] = t;
quickSort(nums, l, i-1);
quickSort(nums, i+1, r);
}
7、堆排序
// 堆排序
private void heapSort(int[] nums) {
int n = nums.length;
for(int i=n/2-1; i>=0; i--) {
adjustHeap(nums, i, n);
}
for(int i=n-1; i>0; i--) {
swap(nums, 0, i);
adjustHeap(nums, 0, i);
}
}
private void adjustHeap(int[] nums, int k, int n) {
int t = nums[k];
for(int i=2*k+1; i<n; i=2*i+1) {
if(i+1 < n && nums[i+1] > nums[i]) i++;
if(nums[i] > t) {
nums[k] = nums[i];
k = i;
} else {
break;
}
}
nums[k] = t;
}
8、计数排序
// 计数排序
private void countingSort(int[] nums) {
int n = nums.length;
int maxValue = Integer.MIN_VALUE;
for (int num : nums) {
maxValue = Math.max(maxValue, num);
}
int[] bucket = new int[maxValue+1];
for(int num : nums) {
bucket[num]++;
}
int t=0;
for(int i=0; i<=maxValue; i++) {
while(bucket[i] > 0) {
nums[t++] = i;
bucket[i]--;
}
}
}
9、桶排序
// 桶排序
private void bucketSort(int[] nums) {
int n = nums.length;
int maxValue = Integer.MIN_VALUE;
int minValue = Integer.MAX_VALUE;
for(int num : nums) {
maxValue = Math.max(maxValue, num);
minValue = Math.min(minValue, num);
}
// 计算桶的数量
int bucketNum = (maxValue - minValue) / n + 1;
ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketNum);
for(int i = 0; i < bucketNum; i++){
bucketArr.add(new ArrayList<>());
}
// 将每个元素放入桶
for (int value : nums) {
int num = (value - minValue) / n;
bucketArr.get(num).add(value);
}
// 对每个桶进行排序
for (ArrayList<Integer> integers : bucketArr) {
Collections.sort(integers);
}
// 将桶中的元素赋值到原序列
int index = 0;
for (ArrayList<Integer> integers : bucketArr) {
for (Integer integer : integers) {
nums[index++] = integer;
}
}
}
10、基数排序
// 基数排序
private void radixSort(int[] nums) {
int n = nums.length;
int maxValue = Integer.MIN_VALUE;
for(int num : nums) {
maxValue = Math.max(maxValue, num);
}
int maxx = 0;
while(maxValue > 0) {
maxValue /= 10;
maxx++;
}
int t = 1;
for(int i=0; i<maxx; i++) {
List<List<Integer>> list = new ArrayList<>();
for(int j=0; j<10; j++) {
list.add(new ArrayList<>());
}
for(int num : nums) {
list.get((num/t)%10).add(num);
}
int tt=0;
for(int j=0; j<10; j++) {
for(int k=0; k<list.get(j).size(); k++) {
nums[tt++] = list.get(j).get(k);
}
}
t *= 10;
}
}
汇总
import javassist.CodeConverter;
import jdk.nashorn.tools.Shell;
import org.springframework.http.converter.xml.MarshallingHttpMessageConverter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class Solution {
// 冒泡排序
private void bubbleSort(int[] nums) {
int n = nums.length;
boolean flag = false;
for(int i=0; i<n; i++) {
if(flag) break;
flag = true;
for(int j=1; i+j<n; j++) {
if(nums[j-1] > nums[j]) {
swap(nums, j-1, j);
flag = false;
}
}
}
}
// 选择排序
private void selectionSort(int[] nums) {
int n = nums.length;
for(int i=0; i<n; i++) {
int t = i;
for(int j=i+1; j<n; j++) {
if(nums[t] > nums[j]) {
t = j;
}
}
swap(nums, i, t);
}
}
// 插入排序
private void insertionSort(int[] nums) {
int n = nums.length;
for(int i=1; i<n; i++) {
int j=i, t=nums[j];
while(j-1 >= 0 && nums[j-1] > t) {
nums[j] = nums[j-1];
j -= 1;
}
nums[j] = t;
}
}
// 希尔排序
private void shellSort(int[] nums) {
int n = nums.length;
for(int i=n/2; i>0; i/=2) {
for(int j=i; j<n; j++) {
int t = nums[j];
while(j-i >= 0 && nums[j-i] > t) {
nums[j] = nums[j-i];
j -= i;
}
nums[j] = t;
}
}
}
// 归并排序
private void mergeSort(int[] nums) {
mergeSort(nums, 0, nums.length-1);
}
private void mergeSort(int[] nums, int l, int r) {
if(l >= r) return;
int mid = (l+r) >> 1;
mergeSort(nums, l, mid);
mergeSort(nums, mid+1, r);
merge(nums, l, mid, r);
}
private void merge(int[] nums, int l, int mid, int r) {
int[] tmp = new int[r-l+1];
int k=0, i=l, j=mid+1;
while(i <= mid && j <= r) {
if(nums[i] > nums[j]) tmp[k++] = nums[j++];
else tmp[k++] = nums[i++];
}
while(i <= mid) {
tmp[k++] = nums[i++];
}
while(j <= r) {
tmp[k++] = nums[j++];
}
System.arraycopy(tmp, 0, nums, l, r + 1 - l);
}
// 快速排序
private void quickSort(int[] nums) {
quickSort(nums, 0, nums.length-1);
}
private void quickSort(int[] nums, int l, int r) {
if(l >= r) return;
int t=nums[l], i=l, j=r;
while(i < j) {
while(i < j && nums[j] >= t) j--;
nums[i] = nums[j];
while(i < j && nums[i] <= t) i++;
nums[j] = nums[i];
}
nums[i] = t;
quickSort(nums, l, i-1);
quickSort(nums, i+1, r);
}
// 堆排序
private void heapSort(int[] nums) {
int n = nums.length;
for(int i=n/2-1; i>=0; i--) {
adjustHeap(nums, i, n);
}
for(int i=n-1; i>0; i--) {
swap(nums, 0, i);
adjustHeap(nums, 0, i);
}
}
private void adjustHeap(int[] nums, int k, int n) {
int t = nums[k];
for(int i=2*k+1; i<n; i=2*i+1) {
if(i+1 < n && nums[i+1] > nums[i]) i++;
if(nums[i] > t) {
nums[k] = nums[i];
k = i;
} else {
break;
}
}
nums[k] = t;
}
// 计数排序
private void countingSort(int[] nums) {
int n = nums.length;
int maxValue = Integer.MIN_VALUE;
for (int num : nums) {
maxValue = Math.max(maxValue, num);
}
int[] bucket = new int[maxValue+1];
for(int num : nums) {
bucket[num]++;
}
int t=0;
for(int i=0; i<=maxValue; i++) {
while(bucket[i] > 0) {
nums[t++] = i;
bucket[i]--;
}
}
}
// 桶排序
private void bucketSort(int[] nums) {
int n = nums.length;
int maxValue = Integer.MIN_VALUE;
int minValue = Integer.MAX_VALUE;
for(int num : nums) {
maxValue = Math.max(maxValue, num);
minValue = Math.min(minValue, num);
}
// 计算桶的数量
int bucketNum = (maxValue - minValue) / n + 1;
ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketNum);
for(int i = 0; i < bucketNum; i++){
bucketArr.add(new ArrayList<>());
}
// 将每个元素放入桶
for (int value : nums) {
int num = (value - minValue) / n;
bucketArr.get(num).add(value);
}
// 对每个桶进行排序
for (ArrayList<Integer> integers : bucketArr) {
Collections.sort(integers);
}
// 将桶中的元素赋值到原序列
int index = 0;
for (ArrayList<Integer> integers : bucketArr) {
for (Integer integer : integers) {
nums[index++] = integer;
}
}
}
// 基数排序
private void radixSort(int[] nums) {
int n = nums.length;
int maxValue = Integer.MIN_VALUE;
for(int num : nums) {
maxValue = Math.max(maxValue, num);
}
int maxx = 0;
while(maxValue > 0) {
maxValue /= 10;
maxx++;
}
int t = 1;
for(int i=0; i<maxx; i++) {
List<List<Integer>> list = new ArrayList<>();
for(int j=0; j<10; j++) {
list.add(new ArrayList<>());
}
for(int num : nums) {
list.get((num/t)%10).add(num);
}
int tt=0;
for(int j=0; j<10; j++) {
for(int k=0; k<list.get(j).size(); k++) {
nums[tt++] = list.get(j).get(k);
}
}
t *= 10;
}
}
public static void main(String[] args) {
Solution test = new Solution();
int[] nums1 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.bubbleSort(nums1);
System.out.println("冒泡排序: " + Arrays.toString(nums1));
int[] nums2 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.selectionSort(nums2);
System.out.println("选择排序: " + Arrays.toString(nums2));
int[] nums3 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.insertionSort(nums3);
System.out.println("插入排序: " + Arrays.toString(nums3));
int[] nums4 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.shellSort(nums4);
System.out.println("希尔排序: " + Arrays.toString(nums4));
int[] nums5 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.mergeSort(nums5);
System.out.println("归并排序: " + Arrays.toString(nums5));
int[] nums6 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.quickSort(nums6);
System.out.println("快速排序: " + Arrays.toString(nums6));
int[] nums7 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.heapSort(nums7);
System.out.println("堆排序: " + Arrays.toString(nums7));
int[] nums8 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.countingSort(nums8);
System.out.println("计数排序: " + Arrays.toString(nums8));
int[] nums9 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.bucketSort(nums9);
System.out.println("桶排序: " + Arrays.toString(nums9));
int[] nums10 = {9, 1, 2, 5, 8, 7, 6, 3, 4, 0};
test.radixSort(nums10);
System.out.println("基数排序: " + Arrays.toString(nums10));
}
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
输出:
能力有限,如有误,欢迎指正。。。