import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * 排序算法 * 使用三个:numberSort stringSort chineseSort * @author KyLinD http://hi.baidu.com/kylind * */ public class SortingAlgorithm { /** * 数字进行排序,使用的选择排序 * @param data 待处理数组 * @param asc 是否升序 * @return 排列好的数组 */ public static long[] numberSort(long[] data , boolean asc){ if(data == null || data.length ==0) return null; return selectSort(data,asc); } /** * 冒泡排序算法 * 说明:相邻的比较,符合条件就调换,每次排好一个剩余的最小/最大数 * @param data 待排序的数组 * @param asc 是否升序 * @return 排序后的数组 */ protected static long[] bubbleSort(long[] data , boolean asc){ for(int i=0 ; i<data.length ; i++) for(int j=data.length-1 ; j>i ; j--) if(asc){ if(data[j] < data[j-1]) swap(data,j,j-1); }else{ if(data[j] > data[j-1]) swap(data,j,j-1); } return data; } /** * 插入排序算法 * 说明:经过的数字都已经排好序,每次循环增加一个 * @param data 待排序的数组 * @param asc 是否升序 * @return 排序后的数组 */ protected static long[] insertSort(long[] data , boolean asc){ return insertSortDo(data,0,data.length-1,asc); } /** * 选择排序算法 * 说明:查找剩余的最小/最大数排到前面位置 * @param data 待排序的数组 * @param asc 是否升序 * @return 排序后的数组 */ protected static long[] selectSort(long[] data , boolean asc){ for(int i=0 ; i<data.length ; i++){ int lowIndex = i; for(int j=data.length-1 ; j>i ; j--){ if(asc){ if(data[j] < data[lowIndex]) lowIndex = j; }else{ if(data[j] > data[lowIndex]) lowIndex = j; } } swap(data,i,lowIndex); } return data; } }