sort
来源:互联网 发布:360防火墙怎么设置网络 编辑:程序博客网 时间:2024/05/17 12:46
import java.util.Arrays;public class MySort { /** * 假冒的排序 * * @param data * @return */ public int[] fakeBuble(int[] data) { int length = data.length; int temp; for (int i = 0; i < length - 1; i++) { for (int j = i + 1; j < length; j++) { if (data[i] > data[j]) { temp = data[i]; data[i] = data[j]; data[j] = temp; } } System.out.println("the " + i + " time is: "); for (int kk : data) { System.out.print(kk + ","); } System.out.println(); } return data; } /** * 冒泡排序 * * @param data * @return */ public int[] Buble(int[] data) { int length = data.length; for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - 1 - i; j++) { if (data[j] > data[j + 1]) { int temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } System.out.println("the " + i + " time is: "); for (int kk : data) { System.out.print(kk + ","); } System.out.println(); } return data; } /** * 选择排序 * ** * * @param data * @return */ public int[] chooseSort(int[] data) { if (data == null || data.length == 0) return null; int length = data.length; for (int j = length - 1; j > 0; j--) { int max = data[j]; int k = 0; int maxin = data[0]; for (int i = 0; i < j; i++) { if (data[i] >= maxin) { maxin = data[i]; k = i; } } if (max < data[k]) { int change = data[k]; data[k] = data[j]; data[j] = change; } System.out.println("the " + j + " time is: "); for (int kk : data) { System.out.print(kk + ","); } System.out.println(); } return data; } /** * 插入排序 * * @param data * @return */ public int[] insertSort(int[] data) { if (data == null || data.length == 0) return null; int length = data.length; for (int i = 1; i < length; i++) { int d = data[i]; int j = i - 1; if (d < data[j]) { while (j >= 0 && d < data[j]) { data[j + 1] = data[j]; j--; } data[j + 1] = d; } } return data; } private void swap(int x, int y) { x = x ^ y; y = x ^ y; x = x ^ y; } /** * 快排,划范围 * * @param data * @param low * @param high * @return */ private int partition(int[] data, int low, int high) { int privotKey = data[low]; while (low < high) { while (low < high && data[high] >= privotKey) { high--; } data[low] = data[high]; while (low < high && data[low] <= privotKey) { low++; } data[high] = data[low]; } data[low] = privotKey; return low; } /** * 快排 * * @param data */ public void hurrySort(int[] data, int low, int high) { if (low < high) { int location = partition(data, low, high); hurrySort(data, low, location - 1); hurrySort(data, location + 1, high); } } /** * 堆排序 * * @param data */ public void heapSort(int[] data) { } /** * 希尔排序 * @param data */ public void shellsort(int[] data) { int length = data.length; int k = data.length / 2; while (k != 0) { for (int jj = 0; jj < k; jj++) { for (int i = jj + k; i < length; ) { int j = i - k; int temp = data[i]; if (temp < data[j]) { while (j >= 0 && temp <= data[j]) { data[j + k] = data[j]; j = j - k; } data[j + k] = temp; } i = i + k; } } System.out.println(Arrays.toString(data)); k = k / 2; } } /** * 归并排序 * * @param data * @param low * @param high */ public void mergeSort(int[] data, int low, int high) { int mid = (low + high) / 2; if (low < high) { mergeSort(data, low, mid); mergeSort(data, mid + 1, high); merge(data, low, mid, high); } } private void merge(int[] data, int low, int mid, int high) { int[] temp = new int[high - low + 1]; int k = 0; int i = low; int j = mid + 1; while (i <= mid && j <= high) { if (data[i] < data[j]) { temp[k++] = data[i++]; } else { temp[k++] = data[j++]; } } while (i <= mid) { temp[k++] = data[i++]; } while (j <= high) { temp[k++] = data[j++]; } for (int kk = 0; kk < temp.length; kk++) { data[kk + low] = temp[kk]; } } public static void main(String[] args) { int[] data = {2, 7, 8, 3, 1, 6, 9, 0, 5, 4}; // int [] data={30,32,9,64,14,17,8}; new MySort().mergeSort(data, 0, data.length - 1); System.out.println(Arrays.toString(data)); }}
0 0