/** *//**轮询次数计数器*/ staticint sort_counter =0; /** *//**交换次数计数器*/ staticint swap_counter =0; /** *//** * 冒泡排序法 * 从小到大 * @param data - 原始数据 * @param smallToBig - true if 从小到大; false if 从大到小 */ publicstaticfinalvoid bubbleSort(int[] data, boolean smallToBig) ...{ int high = data.length; int sort_start = sort_counter; int swap_start = swap_counter; for(int i =0; i < high; i++) ...{ for(int j = i; j < high; j++) ...{ ++sort_counter; if(smallToBig) ...{ if(data[i] > data[j]) ...{ swapData(data, i, j); } }else...{ if(data[i] < data[j]) ...{ swapData(data, i, j); } } } } Util.debug("bubbleSort::Sort_Counter::"+ (sort_counter - sort_start) +"::swap_counter::"+ (swap_counter - swap_start)); } /** *//** * Quick sort 来排序一个数组 * 从小到大 * @param data - 要排序的数组 * @param smallToBig - true if 从小到大; false if 从大到小 */ publicstaticfinalvoid quickSort(int[] data, boolean smallToBig) ...{ int low =0; int high = data.length -1; int sort_start = sort_counter; int swap_start = swap_counter; quickSort(data, low, high, smallToBig); Util.debug("quickSort::Sort_Counter::"+ (sort_counter - sort_start) +"::swap_counter::"+ (swap_counter - swap_start)); } /** *//** * 快速排序 * @param data - 原始数组 * @param low - * @param high */ privatestaticfinalvoid quickSort(int[] data, int low, int high, boolean smallToBig) ...{ if(low < high) ...{ int pivot = partition(data, low, high, smallToBig); quickSort(data, low, pivot -1, smallToBig); quickSort(data, pivot +1, high, smallToBig); } } /** *//** * 分割点 * @param data * @param low * @param high * @return */ privatestaticfinalint partition(int[] data, int low, int high, boolean smallToBig) ...{ //当前位置为第一个元素所在位置 int pos = low; //采用第一个元素位轴 int pivot = data[pos]; for(int i = low +1; i <= high; i++) ...{ ++sort_counter; if(smallToBig) ...{ //从小到大 if(data[i] < pivot) ...{ ++pos; swapData(data, pos, i); } }else...{ //从大到小 if(data[i] > pivot) ...{ ++pos; swapData(data, pos, i); } } } swapData(data, low, pos); return pos; } /** *//** * 交换数据 * @param data - 原始数组 * @param i * @param j */ privatestaticfinalvoid swapData(int[] data, int i, int j) ...{ int tmp = data[i]; data[i] = data[j]; data[j] = tmp; ++swap_counter; }
/** *//** * Build a 8-byte array from a long. No check is performed on the * array length. * * @param n The number to convert. * @param b The array to fill. * @return A byte[]. */ publicstaticbyte[] toBytes(long n, byte[] b) ...{ b[7] = (byte) (n); n >>>=8; b[6] = (byte) (n); n >>>=8; b[5] = (byte) (n); n >>>=8; b[4] = (byte) (n); n >>>=8; b[3] = (byte) (n); n >>>=8; b[2] = (byte) (n); n >>>=8; b[1] = (byte) (n); n >>>=8; b[0] = (byte) (n); return b; } /** *//** * Build a long from first 8 bytes of the array. * * @param b The byte[] to convert. * @return A long. */ publicstaticlong toLong(byte[] b) ...{ return ((((long) b[7]) &0xFF) + ((((long) b[6]) &0xFF) <<8) + ((((long) b[5]) &0xFF) <<16) + ((((long) b[4]) &0xFF) <<24) + ((((long) b[3]) &0xFF) <<32) + ((((long) b[2]) &0xFF) <<40) + ((((long) b[1]) &0xFF) <<48) + ((((long) b[0]) &0xFF) <<56)); }