1. 程式人生 > >Java氣泡排序的6種寫法(1)

Java氣泡排序的6種寫法(1)

/**
 * 
 */
package ch02;

/**
 * @author Administrator
 *sorting algorithm
 */
public class javaData1 {

//  public static void swap(Long a,Long b){
//      long tmp;
//      tmp=a;
//      a=b;
//      b=tmp;
//  }
    public static void show(long []arr){
        System.out.print("arr=[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" "
); } System.out.print("]"); System.out.println(); } /** * * 氣泡排序的第一種寫法 * */ public static void BubbleSort(long []arr){ for (int i = 0; i < arr.length; i++) { for (int j = 1; j < arr.length-i; j++) { if (arr[j-1
]>arr[j]) { //swap(arr[j-1], arr[j]); //Swap swap=new Swap(arr[j-1], arr[j]); //Swap.swap(arr[j-1], arr[j]); arr[j-1]=arr[j-1]^arr[j]; arr[j]=arr[j-1]^arr[j]; arr[j-1]=arr[j-1]^arr[j]; //swap.swap(arr[j-1], arr[j]);
} } } } /** * * 氣泡排序的第二種寫法 * */ public static void BubbleSort1(long []arr){ for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length-i-1; j++) { if (arr[j]>arr[j+1]) { arr[j]=arr[j]^arr[j+1]; arr[j+1]=arr[j]^arr[j+1]; arr[j]=arr[j]^arr[j+1]; } } } } /** * * 氣泡排序的第三種寫法 * */ public static void BubbleSort2(long[]arr){ for (int i = 0; i < arr.length-1; i++) { for (int j = arr.length-1; j >0; j--) { if (arr[j-1]>arr[j]) { arr[j-1]=arr[j-1]^arr[j]; arr[j]=arr[j-1]^arr[j]; arr[j-1]=arr[j-1]^arr[j]; } } } } /** * 氣泡排序的第四種寫法 * */ public static void BubbleSort4(int []arr){ boolean flag=true; do{ flag=false; for (int j = arr.length-1; j >=1; j--) { if (arr[j-1]>arr[j]) { arr[j-1]=arr[j-1]^arr[j]; arr[j]=arr[j-1]^arr[j]; arr[j-1]=arr[j-1]^arr[j]; flag=true; } } }while(flag); } /** * * 氣泡排序的第五種寫法 * * 這種寫法的思想是: 第一個元素和後面的所有元素比較, * 內層迴圈一輪結束,就可以將最大的數放到最後;接下來 * 是執行第二次內層的迴圈,將已經排序之後的陣列(已經排列 * 好最大的數字)的第二大的數字放到倒數第二位; * 接下來是依次將大數放到後面。 * */ public static void BubbleSort4(long[]arr){ for (int i = 0; i < arr.length; i++) { for (int j = i+1; j < arr.length; j++) { if (arr[i]>arr[j]) { arr[i]=arr[i]^arr[j]; arr[j]=arr[i]^arr[j]; arr[i]=arr[i]^arr[j]; } } } } /** * * 氣泡排序的第六種寫法 * 這種寫法的思想是:從陣列的最後一個元素進行和之前所有的元素 * 進行比較,只一次內層的迴圈,將最小的數字放到第一位;接下來 * 是執行第二次的內層迴圈,將第二小的的放到第二位,依次將陣列 * 從小到大排列。 * */ public static void BubbleSort5(long[]arr){ for (int i = 0; i < arr.length; i++) { for (int j = arr.length-1; j >i; j--) { if (arr[i]>arr[j]) { arr[i]=arr[i]^arr[j]; arr[j]=arr[i]^arr[j]; arr[i]=arr[i]^arr[j]; } } } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub long[] arr = { 0, 5, 4, 333, 91, 9,8,7,6,3,2,1-99999, 67, 78, 87, 66, 41, -11119 }; show(arr); BubbleSort5(arr); // BubbleSort(arr); // SelectSort1(arr); //InsertSort(arr); // ShellSort(arr); //QuickSort(arr,0,arr.Length-1); show(arr); } } class Swap{ long a; long b; public Swap(long a, long b) { super(); this.a = a; this.b = b; } public static void swap(long a,long b){ // long tmp=a; // a=b; // b=tmp; a=a^b; b=a^b; a=a^b; } }