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;
     }




}



你可能感兴趣的:(java,数据结构,javase,java,SE&java,EE&架构,算法&数据结构)