菜鸟学JAVA之—— 基本排序算法(直接排序,选择排序,冒泡排序)

mac2026-02-04  0

一、 直接排序

思路: 首先需要两个嵌套的for循环,外层for循环控制轮数;内层for循环控制每轮比较的次数。

这里来演示一下遍历的过程:

第一轮: 首先让i指向数组的首部,让j指向i的后一个元素,两者比较,2比1大,所以交换2跟1的位置,然后j后移 依次这样排完一轮的结果为: 第二轮: 让i后移,j指向i的后一位,继续重复第一轮的过程。

第三轮: 一直重复就可以排序完成了。

代码实现

//此代码包含转换过程 import java.util.*; public class DSort{ public static void main(String[] args){ int[] arrays = {1,2,3,4,5,6,7,8}; for(int i = 0; i < arrays.length; i++){ for(int j = i+1; j < arrays.length; j++){ if(arrays[i]<arrays[j]){ int temp = arrays[i]; arrays[i] = arrays[j]; arrays[j] = temp; } System.out.println("第"+j+"次:"+Arrays.toString(arrays)); } System.out.println("第"+i+"轮:"+Arrays.toString(arrays)); } } }

执行结果:

二、 选择排序

思路: 跟直接排序相比,选择排序先不着急换位,它先遍历一圈数组,找到最大值,并且记录最大值的角标,然后再转换。

第一轮: 先让数组的第一个数为最大值,然后j依次向后遍历,找到最大值,记录该值在数组的角标,然后跟第一个数交换位置 第二轮: i后移,让第二个数为最大值,然后j从第二个数开始依次向后遍历,找到最大值,记录该值在数组的角标,然后跟第一个数交换位置 代码实现

//此代码包含转换过程 import java.util.*; public class SSort{ public static void main(String[] args){ int[] arrays = {1,2,3,4,5,6}; for(int i = 0; i < arrays.length; i++){ int max = arrays[i]; int index = i; for(int j = i; j < arrays.length; j++){ if(arrays[j] > max){ max = arrays[j]; index = j; } System.out.println("Di"+j+"Ci:" + Arrays.toString(arrays)); } max = arrays[i]; arrays[i] = arrays[index]; arrays[index] = max; System.out.println("Di"+i+"Lun:" + Arrays.toString(arrays)); } } }

执行结果:

三、 冒泡排序(在数据量很大时,他才能体现出价值)

思路: 拿当前位置和下一个位置比较,替换。然后当前位置后移再与下一个比较替换

第一轮: 首先j与j+1比较,j+1>j,位置互换;(这里说的j和j+1说的是它们所指向的那个值) 然后j后移再比较,j+1>j,位置互换 一直重复此步骤到此轮结束

第二轮: 重复第一轮的步骤

代码实现

import java.util.*; public class BSort{ public static void main(String[] args){ int[] arrays = {1,2,3,4,5,6}; for(int i = 0;i < arrays.length; i++){ for(int j = 0; j < arrays.length-i-1;j++){ if(arrays[j] < arrays[j+1]){ int temp = arrays[j]; arrays[j] = arrays[j+1]; arrays[j+1] = temp; } System.out.println("Di"+j+"Ci:" + Arrays.toString(arrays)); } System.out.println("Di"+i+"Lun:" + Arrays.toString(arrays)); } } }

执行结果: Over,之后还会更新其他的排序算法

最新回复(0)