向大端冒泡排序
public class Bubble {
/**
* 向大端冒泡排序
*
* @param arr
* @param <T>
*/
public static <T extends Comparable<? super T>> void bubbleSort(T[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j].compareTo(arr[j + 1]) > 0) {
swap(arr, j, j + 1);
}
}
}
}
public static void swap(Object[] arr, int i, int j) {
Object temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static <T extends Comparable<? super T>> void printArray(T[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] arr = {1, 5, 9, 7, 3, 10, 2, 8, 6, 4};
bubbleSort(arr);
printArray(arr);
}
}
向小端冒泡排序
public class Bubble {
/**
* 向小端冒泡排序
*
* @param arr
* @param <T>
*/
public static <T extends Comparable<? super T>> void bubbleSort(T[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length - 1; j > 0; j--) {
if (arr[j].compareTo(arr[j - 1]) < 0) {
swap(arr, j - 1, j);
}
}
}
}
public static void swap(Object[] arr, int i, int j) {
Object temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static <T extends Comparable<? super T>> void printArray(T[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] arr = {1, 5, 9, 7, 3, 10, 2, 8, 6, 4};
bubbleSort(arr);
printArray(arr);
}
}
鸡尾酒排序
public class Bubble {
/**
* 鸡尾酒排序
*
* @param arr
* @param <T>
*/
public static <T extends Comparable<? super T>> void bubbleSort(T[] arr) {
int low = 0;
int high = arr.length - 1;
while (low < high) {
for (int i = low; i < high; i++) {
if (arr[i].compareTo(arr[i + 1]) > 0) {
swap(arr, i, i + 1);
}
}
high--;
for (int j = high; j > low; j--) {
if (arr[j].compareTo(arr[j - 1]) < 0) {
swap(arr, j - 1, j);
}
}
low++;
}
}
public static void swap(Object[] arr, int i, int j) {
Object temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static <T extends Comparable<? super T>> void printArray(T[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] arr = {5, 1, 9, 7, 3, 10, 2, 8, 6, 4};
bubbleSort(arr);
printArray(arr);
}
}
冒泡排序优化--标识符
public class Bubble {
/**
* 冒泡排序优化--标记符
*
* @param arr
* @param <T>
*/
public static <T extends Comparable<? super T>> void bubbleSort(T[] arr) {
for (int i = 0; i < arr.length; i++) {
boolean flag = true;
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j].compareTo(arr[j + 1]) > 0) {
swap(arr, j, j + 1);
flag = false; //这层循环有交换
}
}
if (flag) {//可以退出循环了,已有序
break;
}
}
}
public static void swap(Object[] arr, int i, int j) {
Object temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static <T extends Comparable<? super T>> void printArray(T[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] arr = {5, 1, 9, 7, 3, 10, 2, 8, 6, 4};
bubbleSort(arr);
printArray(arr);
}
}
冒泡排序优化--标记位
public class Bubble {
/**
* 冒泡排序优化--标记符
*
* @param arr
* @param <T>
*/
public static <T extends Comparable<? super T>> void bubbleSort(T[] arr) {
for (int i = 0, pos = 0; i < arr.length; i = arr.length - pos) {
pos = 0;
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j].compareTo(arr[j + 1]) > 0) {
swap(arr, j, j + 1);
pos = j + 1;//说明pos后面的元素都已有序,不需要进行比较了
}
}
}
}
public static void swap(Object[] arr, int i, int j) {
Object temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static <T extends Comparable<? super T>> void printArray(T[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] arr = {5, 1, 9, 7, 3, 10, 2, 8, 6, 4};
bubbleSort(arr);
printArray(arr);
}
}