八大排序
冒泡排序
public static void bubbleSort(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
boolean flag = false;
for (int j = 0; j < nums.length - i - 1; j++) {
if(nums[j] > nums[j + 1]) {
flag = true;
Swap.swap(nums, j, j + 1);
}
}
if(!flag) {
break;
}
}
}
选择排序
public static void selectSort(int[] nums) {
for(int i = 0; i < nums.length - 1; ++i) {
int min = i;
for(int j = i + 1; j < nums.length; ++j) {
if(nums[j] < nums[min]) {
min = j;
}
}
Swap.swap(nums, min, i);
}
}
插入排序
public static void insertSort(int[] nums) {
for(int i = 1; i < nums.length; ++i) {
int j = i - 1;
while(j >= 0 && nums[j] > nums[j + 1]) {
Swap.swap(nums, j, j + 1);
--j;
}
}
}
希尔排序
public static void shellSort(int[] nums) {
int n = nums.length;
int gap = n;
while(gap >= 2) {
gap >>= 1;
for(int i = 0; i < n - gap; ++i) {
int j = i;
while(j >= 0 && nums[j] > nums[j + gap]) {
Swap.swap(nums, j, j + gap);
j -= gap;
}
}
}
}
快速排序
public static void quickSort(int[] nums) {
quickSortImpl(nums, 0, nums.length - 1);
}
private static void quickSortImpl(int[] nums, int left, int right) {
if(left >= right) {
return;
}
Random random = new Random();
int pivot = nums[random.nextInt(right - left + 1) + left];
int pl = left - 1;
int pr = right + 1;
for(int i = left; i < pr; ++i) {
if(nums[i] < pivot) {
Swap.swap(nums, i, ++pl);
} else if(nums[i] > pivot) {
Swap.swap(nums, i--, --pr);
}
}
quickSortImpl(nums, left, pl);
quickSortImpl(nums, pr, right);
}
归并排序
public static void mergeSort(int[] nums) {
mergeSortImpl(nums, 0, nums.length - 1);
}
private static void mergeSortImpl(int[] nums, int left, int right) {
if(left >= right) {
return;
}
int[] temp = new int[right - left + 1];
int mid = left + ((right - left) >> 1);
mergeSortImpl(nums, left, mid);
mergeSortImpl(nums, mid + 1, right);
int m = left;
int n = mid + 1;
int i = 0;
while(m <= mid && n <= right) {
if(nums[m] <= nums[n]) {
temp[i++] = nums[m++];
} else {
temp[i++] = nums[n++];
}
}
while(n <= right) {
temp[i++] = nums[n++];
}
while(m <= mid) {
temp[i++] = nums[m++];
}
System.arraycopy(temp, 0, nums, left, right - left + 1);
}
堆排序
public static void heapSort(int[] nums) {
buildHeap(nums, nums.length);
System.out.println(Arrays.toString(nums));
for(int i = nums.length - 1; i >= 0; --i) {
Swap.swap(nums, 0, i);
heapify(nums, i, 0);
}
}
private static void heapify(int[] nums, int n, int i) {
int left = (i << 1) + 1;
int right = (i << 1) + 2;
int max = i;
if(left < n && nums[left] > nums[max]) {
max = left;
}
if(right < n && nums[right] > nums[max]) {
max = right;
}
if(i != max) {
Swap.swap(nums, max, i);
heapify(nums, n, max);
}
}
private static void buildHeap(int[] nums, int n) {
for (int i = (n >> 1) - 1; i >= 0; --i) {
heapify(nums, n, i);
}
}
计数排序
public static void countSort(int[] nums) {
int[] arr = new int[101];
for (int num : nums) {
++arr[num];
}
int cur = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] > 0) {
Arrays.fill(nums, cur, cur + arr[i], i);
cur += arr[i];
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现