常见排序算法的Java实现

测试类

import com.example.test.algorithms.util.SortUtil;
import org.apache.commons.lang3.ArrayUtils;
import java.util.Random;
public class TestSort {
private static final int N = 10;
public static void main(String[] args) {
int[] arr = new Random().ints(0, N).distinct().limit(N).toArray();
System.out.println("排序前:" + ArrayUtils.toString(arr));
SortUtil.bubbleSort(arr);
System.out.println("排序后:" + ArrayUtils.toString(arr));
}
}

排序算法:

public class SortUtil {
/**
* 冒泡排序
*
* @param arr
*/
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}
public static void quickSort(int[] arr) {
doQuickSort(arr, 0, arr.length - 1);
}
/**
* 快速排序
* 不适合含有重复元素的
*
* @param arr
* @param left
* @param right
*/
private static void doQuickSort(int[] arr, int left, int right) {
if (left >= right) {
return;
}
int base = arr[left];
int l = left;
int r = right;
while (l < r) {
// 从右向左找比基准数小的
while (r > l && arr[r] > base) {
r--;
}
// 从左向右找比基准数大的
while (l < r && arr[l] < base) {
l++;
}
// 还存在比基准数大的或者比基准数小的
if (l < r) {
swap(arr, l, r);
}
}
// 基准数归位 此时l == r
// arr[l] = arr[r];
arr[r] = base;
doQuickSort(arr, left, r - 1);
doQuickSort(arr, l + 1, right);
}
/**
* 选择排序:
* 遍历找最小的 交换位置
*
* @param arr
*/
public static void selectSort(int[] arr) {
int minIndex = 0;
for (int i = 0; i < arr.length; i++) {
minIndex = i;
for (int j = i; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr, i, minIndex);
}
}
/**
* 插入排序
* 找到小的数,插入到前面
*
* @param arr
*/
public static void insertSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int current = arr[i + 1];
int preIndex = i;
while (preIndex >= 0 && current < arr[preIndex]) {
arr[preIndex + 1] = arr[preIndex];
preIndex--;
}
arr[preIndex + 1] = current;
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
posted @   我自逍遥  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示