Java氣泡排序的6種寫法(1)
阿新 • • 發佈:2019-01-01
/**
*
*/
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;
}
}