冒泡排序

算法定义(摘抄百度文库):
  它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
  这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故得名冒泡排序。
算法的执行过程:
  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]

 

posted @ 2017-04-25 23:58  框架搬运工  阅读(385)  评论(0编辑  收藏  举报