java实现冒泡排序 (2012-05-23 10:18:22)

来源:互联网 发布:死或生5mac 编辑:程序博客网 时间:2024/06/13 12:30

public class test1 {

 
 public static void main(String[] args) {
  // 冒泡排序
  int[] arr = { 10, 2, 34, 5, 12, 8, 43 };
  for (int i = 0; i < arr.length; i++) {
   for (int j = 0; j < arr.length - 1 - i; j++) {
    if (arr[j] > arr[j + 1]) { // 如果后一个数小于前一个数交换
     int tmp = arr[j];
     arr[j] = arr[j + 1];
     arr[j + 1] = tmp;
    }
   }
  }
       for(int n = 0;n<arr.length;n++)
       {
        System.out.println(arr[n]);
       }
 }

}

第一趟循环比较之后的结果

10   2     34   5    12   8    43
   10    5    12   8    34   43

冒泡排序的过程很简单,就是将第一个记录的关键字和第二个记录的关键字进行比较,如果后面的比前面的小则交换,然后比较第二个和第三个,依次类推。比完一趟,最大的那个已经放到了最后的位置,这样就可以对前面N-1个数再循环比较。

所以代码可以解释为:要最终排序必须循环arr.length次,而每一次循环都是两两比较,好比第一次循环(此时i=0)10和2比较,10比2大交换位置;然后10再跟34比较,34大,交换位置;然后34再跟5比较,34大,交换位置;然后34再跟12比较,34大,交换位置;然后34再跟8比较,还是34大,交换位置;最后34跟43比较,43大,不交换位置,所以最后第一次循环结束,接下来就是第二趟循环,第二趟循环就剩下arr.length-1-i(此时的i就等于1,所以就剩下5个数的循环),这就是为什么arr.length的外层for循环里要嵌套arr.length-i-1次循环.