冒泡排序(Bubble Sort)的思路
第一步:从第一位开始,把相邻两位进行比较
如果发现前面的比后面的大,就把大的数据交换在后面,循环比较完毕后,最后一位就是最大的 。这就好比冒泡,每一次循环比较后都让最大的“泡泡”浮到了最上面。
第二步: 重复第一步的循环比较,只是上次浮起来的最大的“泡泡”不用参与比较。第二次比较获得的次大者就会排在最大者的后面。以此类推,数组里面的值通过一次次的循环比较最终完成排序。
根据上述的思路和图可以知道,整个算法可以用两个for循环嵌套来完成。第一层循环来控制循环排序的次数,第二层循环用来控制相邻两个数之间的比较,并把最大者放到最后去。如果数组中存在n个数,那么一共需要进行n-1次的循环比较(最后一个数不用比就是最小的),第i次循环比较的数只有n -1 -i 个。
具体的Java程序如下:
package sort;
/*冒泡排序算法*/
import java.util.Scanner;
public class BubbleSort {
private static Scanner sc;
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] arr = new int[10];
sc = new Scanner(System.in);
System.out.println("请输入你想利用冒泡排序的数:");
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
sort(arr);
print(arr);
}
public static void sort(int [] arr){
//利用双层循环达到冒泡排序的目的
for (int i = 0; i < arr.length - 1; i++) {
//第一层循环用来控制排序的次数,如果有n个数据,则需要n-1次
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;
}
}
}
}
/*将排序完成的数组打印到控制台*/
public static void print(int [] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
冒泡排序是最容易了解和实现的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。