zoukankan      html  css  js  c++  java
  • 交换排序之冒泡排序

    package cn.xingxing.datastructure.sort;
    
    import java.util.Scanner;
    
    /**
     * 
     * <pre>
     * 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
     *  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
     *    在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位flag,将其初始值设置为非0,表示被排序的表是一个无序的表,每一次排序开始前设置flag值为0,在进行数据交换时,修改flag为非0。在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序;
     * 初始关键字排序:38 5 19 26 49 97 1 66
     * 第一次排序结果: 5 19 26 38 49 1 66 [97]
     * 第二次排序结果: 5 19 26 38  1 49 [66 97]
     * 第3次排序结果: 5 19 26  1 38  [49  66 97]
     * 第4次排序结果: 5 19 1 26 [38 49  66 97]
     * 第5次排序结果: 5 1 19 [26 38 49 1 66 97]
     * 第6次排序结果: 1 5 [19 26 38 49 1 66 97]
     * 第6次排序结果: 1 [5 19 26 38 49 1 66 97]
     * 最后排序结果: 1 5 19 26 38 49 1 66 97
     * </pre>
     * 
     * @author icecookstar
     * 
     */
    public class BubbleSort {
    
    	/**
    	 * 交换排序
    	 * @param a
    	 */
    	public static void bubbleSort(int[] a) {
    		boolean flag = true;
    		for (int i = 1; i < a.length && flag == true; i++) {
    			flag = false;
    			for (int j = 0; j < a.length - i; j++) {
    				if (a[j] > a[j + 1]) {
    					flag = true;
    					int temp = a[j + 1];
    					a[j + 1] = a[j];
    					a[j] = temp;
    				}
    			}
    
    		}
    		printArray(a);
    	}
    
    	/**
    	 * 打印数组
    	 * @param a
    	 */
    	public static void printArray(int[] a) {
    		for (int b : a) {
    			System.out.println(b);
    		}
    	}
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// 从键盘读入数据
    		int[] a = receviedDateFormConsole();
    
    		bubbleSort(a);
    	}
    
    	/**
    	 * 接受六个整数
    	 * 
    	 * @return
    	 */
    	public static int[] receviedDateFormConsole() {
    		Scanner sc = new Scanner(System.in);
    
    		int[] a = new int[6];
    		int i = 0;
    
    		System.out.println("请输入要排序的int整数!");
    
    		while (sc.hasNext()) {
    			a[i] = sc.nextInt();
    			i++;
    			if (i >= 6)
    				break;
    		}
    		sc.close();
    		return a;
    	}
    
    }
    

  • 相关阅读:
    JQuery Ajax调用asp.net后台方法
    擦亮自己的眼睛去看SQLServer之简单Insert
    擦亮自己的眼睛去看SQLServer之简单Select
    SQL Server CONVERT() 函数
    给reporting services加个条件型的格式 (轉)
    优化SQL语句:in 和not in的替代方案
    技术不如你,但老板就是赏识他,为什么?
    LINQ to SQL活学活用(1):这要打破旧观念(轉)
    [续] MATLAB 混合编程——下篇:调用其它编程语言
    [精] MATLAB 混合编程——上篇:被其它编程语言调用
  • 原文地址:https://www.cnblogs.com/duanxingxing/p/6550635.html
Copyright © 2011-2022 走看看