Java中常见排序算法
1 冒泡排序
排序思路:两两交换,大的放后面,小的放前面
代码实现
public static void bubblingSort(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]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
2 选择排序
排序思路:每次循环找出最大值(最小)放在数组末尾。
代码实现
public static void selectSort(int[] arr) { for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if (arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } System.out.println(Arrays.toString(arr)); }
3 插入排序
排序思路:将一个元素插入到已有序的数组中,在初始时未知是否存在有序的数据,因此将元素第一个元素看成是有序的。与有序的数组进行比较,比它大则直接放入,比它小则移动数组元素的位置,找到个合适的位置插入。当只有一个数时,则不需要插入了,因此需要n-1
趟排序
代码实现:
/** * 插入排序 * @param arr */ public static void insertSort(int[] arr) { //临时变量 int temp; //外层循环控制需要排序的趟数(从1开始因为将第0位看成了有序数据) for (int i = 1; i < arr.length; i++) { temp = arr[i]; //如果前一位(已排序的数据)比当前数据要大,那么就进入循环比较[参考第二趟排序] int j = i - 1; while (j >= 0 && arr[j] > temp) { //往后退一个位置,让当前数据与之前前位进行比较 arr[j + 1] = arr[j]; //不断往前,直到退出循环 j--; } //退出了循环说明找到了合适的位置了,将当前数据插入合适的位置中 arr[j + 1] = temp; } System.out.println(Arrays.toString(arr)); }
4 快速排序
排序思路:在数组中找一个元素(节点),比它小的放在节点的左边,比它大的放在节点右边。一趟下来,比节点小的在左边,比节点大的在右边。不断执行这个操作….
代码实现:
/** * 快速排序 * @param arr * @param L 指向数组第一个元素 * @param R 指向数组最后一个元素 */ public static void quickSort(int[] arr, int L, int R) { int i = L; int j = R; //支点 int pivot = arr[(L + R) / 2]; //左右两端进行扫描,只要两端还没有交替,就一直扫描 while (i <= j) { //寻找直到比支点大的数 while (pivot > arr[i]) i++; //寻找直到比支点小的数 while (pivot < arr[j]) j--; //此时已经分别找到了比支点小的数(右边)、比支点大的数(左边),它们进行交换 if (i <= j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; i++; j--; } } //上面一个while保证了第一趟排序支点的左边比支点小,支点的右边比支点大了。 //“左边”再做排序,直到左边剩下一个数(递归出口) if (L < j){ quickSort(arr, L, j); } //“右边”再做排序,直到右边剩下一个数(递归出口) if (i < R){ quickSort(arr, i, R); } System.out.println(Arrays.toString(arr)); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律