关闭

Java - 冒泡排序

110人阅读 评论(0) 收藏 举报

冒泡排序

    冒泡排序重复的走访要排序的数列,一次比较2个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。例如:arr[10],第一轮比较10个元素都参与排列,arr[0]先和arr[1]比较,如需要交换顺序,则交换,然后新的arr[1]继续和arr[2]比较,以此类推,第一轮得到参与本轮比较元素中的最大值,放在数组的末尾,第二轮排序时,则上一轮的最大值不参与本轮排序了,以此类推,直到排序完成,我们可以知道,总共排序轮数为:arr.length-1轮。外层for循环控制排序轮数,内层for循环,控制当前轮需要参与排序的元素,有arr.length-i-1个元素参与当前轮排序。

package com.execute.demo;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * time: 10:25
 * date: 2016/8/31
 * author: zhouk
 */
public class BubbleSort {
	public static void main(String[] args) {
		bubbleSort();
	}

	public static void bubbleSort() {
		System.out.print("Please define the length of the array:");
		Scanner scanner = new Scanner(System.in);
		int len = scanner.nextInt();
		int[] arr = new int[len];
		Random random = new Random();
		for (int i = 0; i < arr.length; i++) {
			arr[i] = random.nextInt(100) + 1;
		}
		System.out.println("> before sort: " + Arrays.toString(arr));
		System.out.println();
		// 外层for循环:数组中有 n 个元素,则总共会循环 n-1 次
		for (int i = 0; i < arr.length - 1; i++) {
			// 内层for循环:控制当前外层循环下,参与此次循环,所参与比较的元素个数
			for (int j = 0; j < arr.length - i - 1; j++) {
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
				}
			}
			System.out.println("第 " + (i + 1) + " 轮排序结果" + Arrays.toString(arr));
		}
		System.out.println();
		System.out.println("> after sort: " + Arrays.toString(arr));
	}
}

D:\dev-tools\Java\jdk1.7.0_80\bin\java ...
Please define the length of the array: 5
> before sort: [47, 71, 51, 24, 16]

第 1 轮排序结果:[47, 51, 24, 16, 71]
第 2 轮排序结果:[47, 24, 16, 51, 71]
第 3 轮排序结果:[24, 16, 47, 51, 71]
第 4 轮排序结果:[16, 24, 47, 51, 71]

> after sort: [16, 24, 47, 51, 71]

Process finished with exit code 0

Please define the length of the array: 5  
> before sort: [47, 71, 51, 24, 16]  
  
第 1 轮排序结果:[47, 51, 24, 16, 71]  
第 2 轮排序结果:[47, 24, 16, 51, 71]  
第 3 轮排序结果:[24, 16, 47, 51, 71]  
第 4 轮排序结果:[16, 24, 47, 51, 71]  
  
> after sort: [16, 24, 47, 51, 71]  

解析下排序过程:    
1.第1轮排序参与的元素:47, 71, 51, 24, 16    
  47与71比较,47,71 不换位置 - [47, 71, 51, 24, 16]     
  71与51比较,71,51 交换位置 - [47, 51, 71, 24, 16]     
  71与24比较,71,24 交换位置 - [47, 51, 24, 71, 16]    
  71与16比较,71,16 交换位置 - [47, 51, 24, 16, 71]    
    
2.第2轮排序参与的元素:47, 51, 24, 16  
  47与51比较,47,51 不换位置 - [47, 51, 24, 16, 71]   
  51与24比较,51,24 交换位置 - [47, 24, 51 ,16, 71]    
  51与16比较,51,16 交换位置 - [47, 24, 16, 51, 71]    
    
3.第3轮排序参与的元素:47, 24, 16    
  47与24比较,47,24 交换位置 - [24, 47, 16, 51, 71]     
  47与16比较,47,16 交换位置 - [24, 16, 47, 51, 71]     
    
4.第4轮排序参与的元素:24, 16    
  24与16比较,24,16 交换位置 - [16, 24, 47, 51, 71]  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8191次
    • 积分:284
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类