初学编程的小白来说,当学到数组和循环后,我们都会接触到排序算法的概念。排序算法常用的有10种,下面我就简单的描述一下冒泡排序这种简单容易理解的算法。
冒泡排序属于比较算法,是稳定的算法,选择算法是不稳定的算法。冒泡排序是一种极其简单的排序算法,它重复地遍历过要排序的数组元素,依次比较相邻两个元素,如果他们的顺序(从小到大或者从大到小)错误就把他们调换过来,直到遍历到最后一个元素且没有元素再需要交换,排序完成。这个算法操作起来,越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端,像气泡一样按大小的气泡一个一个的浮出水面。
尽管冒泡排序是最容易了解和实现的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。
冒泡排序的代码:
冒泡排序算法的步骤如下:
- 根据其原理可以将冒泡算法分为n(n比元素总数少1)轮,每一轮又要比较n-i(i代表第几轮)次并交换次数
- 每一轮比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置,对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 每一轮结束后,下一轮开始重复执行2的操作,直至一轮没有比较交换的为止。
public class Tools {
//交换两个数的值
public static void exchangeValue(int[] nums,int a,int b){
int temp;
temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
//随机生成m个1-n之间的数组
public static int[] getInt(int n,int m){
Random random = new Random();
int[] nums = new int[m];
for (int i = 0; i < nums.length; i++) {
nums[i] = random.nextInt(n)+1;
}
return nums;
}
}
public class BubbleSort {
public static void main(String[] args) {
int[] nums = Tools.getInt(100,10);
System.out.println("排序前:");
for (int num : nums) {
System.out.print(num+"\t");
}
bubbleSort(nums);
System.out.println("\n冒泡排序后:");
for (int num : nums) {
System.out.print(num+"\t");
}
}
//冒泡排序
public static void bubbleSort(int nums[]){
// 每次最大元素就像气泡一样"浮"到数组的最后
for (int i = 0; i < nums.length-1; i++) {
// 依次比较相邻的两个元素,使较大的那个向后移
for (int j = 0; j < nums.length-1-i; j++) {
// 如果条件改成nums[j]>=nums[j+1],则变为不稳定的排序算法
if (nums[j]>nums[j+1]){
Tools.exchangeValue(nums,j,j+1);
}
}
}
}
上述代码对序列{ 6, 5, 3, 1, 8, 7, 2, 4 }进行冒泡排序的实现过程如下:
Video_2020
对于其他的算法大家可以参考https://www.cnblogs.com/eniac12/p/5329396.html