在众多算法排序之中冒泡排序是最容易理解也是最简单的。首先我们编写一个排序算法先要理解其原理我们才能更好的对其编写。
冒泡排序之所以称为冒泡是因为其排序时候的特征,因为它的特征就是每一趟排序都会找出一个数组中最大的值或者是最小的值,就跟水里的气泡一样冒出来。简单的来说如果一个数组里有5个数字,需要对其排序,使用冒泡排序的话第一趟排序下来便可以确定一个最大的数或者是一个最小的数,那么第二趟便可以确定一个第二大或者是大二小的数字…就这样依次类推从而把这个数字按照从小到大的顺序或者是从大到小的顺序排序。
既然已经知道了它的原理那么我们便用代码将其实现,这里用的java来实现的。
既然它每一次都可以确定一个数,那么我们便需要n-1次就可以完成排序了,这个n就是你需要排序的数字的个数。
完成冒泡排序我们需要使用两层循环,第一次循环就是排序的次数也就是之前说的n-1次,那么第二个循环就是比较的次数了,因为每一次排序都要找出一个最大的数字或是最小的数字(我们统一找出最大的数字),所以第一次需要每2个数字之间比较一次所以也需要比较n-1次,但是第二次循环比较的话因为已经确定了一个最大的数字了,所以其他的数字已经不需要和这个数字比较了,这样比较不仅没有意义,而且还会浪费内存,而这个时候循环比较的次数就为n-1-1了…这样依次类推,每循环一次,数字之间比较需要的次数便会少一次。理解了这些之后下面便是我们的关键代码了。
for(int i = 0; i < arr.length-1;i++){
for(int j = 0; j < arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
第一层循环相信很容易理解,第二层循环中arr.length-1后还需-i就是因为之前说的每循环一次就可以少比较一次,而i就是控制循环次数的,所以需要-i若是不-i也可以实现这样的效果,但是这样会增加循环的次数要是数据较少的还没有什么影响,单要是数据多的话便会消耗内存。
完整的代码如下:
package com.itds.test;
/**
* @author tb
* @ClassName MaoPao
* @description 冒泡排序
* @DATE 2019/4/10 0010 10:21
**/
public class MaoPao {
public static void main(String[] args) {
int arr[] = {5, 2, 3, 6, 4, 1};
System.out.println("排序前的数组为:");
for (int a : arr) {
System.out.print(a + " ");
}
for(int i = 0; i < arr.length-1;i++){
for(int j = 0; j < arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
System.out.println(" ");
System.out.println("第" + (i+1) +"次循环");
for(int a:arr){
System.out.print(a +" ");
}
}
System.out.println(" ");
System.out.println("排序结束:");
for(int a:arr){
System.out.print(a +" ");
}
}
}
运行完代码后效果如图:
循环次数也如我们之前所说的是数字个数-1,也就是5次,要是你在第二次循环的时候讲a[j] > a[j+1]改为a[j] < a[j+1]结果便会按照从大到小的顺序排列的,不信的话你可以自己去试一试