原文转自:https://blog.csdn.net/u014028392/article/details/76273447
/**
*
*/
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;
}
}