public class Sort { /** * 冒泡排序 * * @param data */ static void bubbleSort(int[] data) { int len = data.length; for (int i = 0; i < len - 1; i++) { boolean flag = false; for (int j = 0; j < len - 1 - i; j++) { if (data[j] > data[j + 1]) { int temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; flag = true; } } if (!flag) break; } } /** * 选择排序 * * @param data */ public static void selectSort(int[] data) { for (int i = 0; i < data.length - 1; i++) { int min = i; for (int j = i + 1; j < data.length; j++) { if (data[min] > data[j]) { min = j; } } if (min != i) { int b = data[min]; data[min] = data[i]; data[i] = b; } } } /** * 快速排序 * * @param data * @param low * @param high */ public static void quickSort(int[] data, int low, int high) { if (low < high) { int key = data[low]; // 选定的基准值(第一个数值作为基准值) int temp; // 记录临时中间值 int i = low, j = high; do { while ((data[i] < key) && (i < high)) i++; while ((data[j] > key) && (j > low)) j--; if (i <= j) { temp = data[i]; data[i] = data[j]; data[j] = temp; i++; j--; } } while (i <= j); if (low < j) quickSort(data, low, j); if (high > i) quickSort(data, i, high); } } private static void pint(int[] data) { for (int i = 0; i < data.length; i++) { System.out.print(data[i] + " "); } System.out.println(); } public static void main(String[] args) { int data[] = new int[] { 1, 3, 6, 8, 287, 2, 56, 8 }; pint(data); quickSort(data, 0, data.length - 1); pint(data); } }
class ArraySort { // 两个有序数组的合并函数 public static int[] MergeList(int a[], int b[]) { int result[]; if (checkSort(a) && checkSort(b)) // 检查传入的数组是否是有序的 { result = new int[a.length + b.length]; int i = 0, j = 0, k = 0; // i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组 while (i < a.length && j < b.length) if (a[i] <= b[j]) { result[k++] = a[i++]; } else { result[k++] = b[j++]; }
/* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 */ while (i < a.length) result[k++] = a[i++]; while (j < b.length) result[k++] = b[j++];
return result; } else { System.out.print("非有序数组,不可排序!"); return null; } }
// 检查数组是否是顺序存储的 public static boolean checkSort(int a[]) { boolean change = true; // 这个标志位是一种优化程序的方法,可以看看我写的冒泡排序优化就会明白了 for (int i = 0; i < a.length - 1 && change; i++) { for (int j = i + 1; j < a.length; j++) if (a[j - 1] > a[j]) return false; else change = false; } return true; }
// 打印函数 public static void print(int b[]) { for (int i = 0; i < b.length; i++) { System.out.print(b[i] + " "); } }
public static void main(String args[]) { int a[] = { 1, 2, 2, 3, 5, 6, 7, 7 }; int b[] = { 1, 2, 4, 5, 8, 8, 9, 10, 11, 12, 12, 13, 14 }; int c[] = MergeList(a, b); if (c != null) print(c); else System.out.println(""); } }