冒泡排序
算法定义(摘抄百度文库):
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故得名冒泡排序。
算法的执行过程:
1.比较相邻的两个元素,如果前一个比后一个大,则交换两个元素的位置
2.比较每一对相邻的元素, 从第一对到最后一对。当第一轮比较结束后,最大的元素已经被排序到尾端。
3.针对除了最后一个之外的元素重复第二步的比较,每次比较后排除上一次排序后的元素(因为上一轮的排序已经将最后一个元素排序好了)
4.重复上述步骤,直到比较条件不成立,结束全部排序过程。
算法实现:Java
1 import java.util.Arrays; 2 3 /** 4 * Created by leemz on 2017/4/25. 5 * 冒泡排序 6 */ 7 public class BubbleSortTest { 8 public static void main(String[] args) { 9 int[] numbers = {54,3,12,42,13,23,45,53,1,2,8,98,87}; 10 bubbleSort(numbers); 11 System.out.println(Arrays.toString(numbers)); 12 } 13 14 /** 15 * 要排序的数组,每次将相邻的两个元素进行比较 16 * @param numbers 17 */ 18 public static void bubbleSort(int[] numbers) { 19 int temp;//临时变量,存储要交换的值 20 int size = numbers.length; 21 for(int i = 0; i < size - 1; i ++) { 22 for(int j = 0; j < size - 1 - i; j ++) { 23 /** 24 * 比较相邻元素,如果前一个大于后一个,则交换位置 25 */ 26 if(numbers[j] > numbers[j + 1]){ 27 swap(numbers, j, j + 1); 28 } 29 } 30 } 31 } 32 33 /** 34 * 交换元素位置 35 * @param numbers 36 * @param firstIndex 37 * @param secondIndex 38 */ 39 public static void swap(int[] numbers, int firstIndex, int secondIndex) { 40 //临时变量存储第一个元素的值 41 int temp = numbers[firstIndex]; 42 //将第一个元素的值设置为下一个元素的值 43 numbers[firstIndex] = numbers[secondIndex]; 44 //将第二个元素的值设置为临时变量保存的第一个元素的值 45 numbers[secondIndex] = temp; 46 } 47 }
程序输出结果如下:
[1, 2, 3, 8, 12, 13, 23, 42, 45, 53, 54, 87, 98]