本文共 1519 字,大约阅读时间需要 5 分钟。
插入排序
思想:每次插入第K+1到前K个有序数组中一个合适位置, K从0开始到N-1, 从而完成排序。 以下为核心算法:此处为 从数组的第from位置到from + len, 进行数据升序排列。 public void sortTest(int[] array, int from, int len){ int tmp; for (int i = from + 1; i < from + len; i++) { //i从开始位置from到结束位置,from + len,开始循环 for(int j= from; j<i; j++) { if(array[j]>array[i] ){ //此处如果改为array[j]<array[i], 则为降序排列 tmp = array[j] ; array[j] = array[i] ; array[i] = tmp ; } } } } 冒泡排序 思想:这个可能是最简单的排序算法了, 每次从数组末端开始比较相邻两元素,把第i小的冒泡到数组的第i个位置, i从0一直 到n-1从而完成排序。 此外也可以从数组开始端开始比较相邻两元素, 把第i大的冒泡到数组的第n-1个位置, i从0到n-1从而完成排序。 以下为核心算法:此处为 从数组的第from位置到from + len, 进行数据升序排列。 public final void bubble_down(int[]array, int from, int len){ i从开始位置from到结束位置,from + len,开始循环 for(int i=from; i<from+len; i++) { for(int j=from+len-1; j>i; j--) { //当i一定的时候, j在[i, from+len-1]范围内比较大小 if(array[j].compareTo(array[j-1])<0 ){//如果array[j]<array[j-1], 那么调用下面的swap()方法进行置换数据,从而进行升序排列 swap(array,j-1,j) ; } } } } 选择排序 思想: 选择排序相对于冒泡来说, 它不是每次发现逆序都交换,而是在找到全局第i小的时候记下该元素的位置, 最后跟第i 个元素交换, 从而保证数组最终的有序。而相对于插入排序来说, 选择排序每次选出的都是全局第i小的, 不会调整前i个元 素了。 以下为核心算法:此方法有个特别之处, i的范围是[0,len],当i一定的时候, j的范围是[i+from, from+len],那么先是在这 个范围内取值array[j]和array[i]相比较, 然后把最小的那个和array[i]更换位置,所以此方法为前len个和从from开始的len个进行对调,从而进行排序。
public void sort(E[] array, int from, int len){ for(int i=0; i<len; i++) { int smallest = i ; int j = i+from ; for(;j<from+len;j++) { if(array[j].compareTo(array[smallest])<0 ){ /** * 小于零则为升序, 大于零则为降序。 */ smallest = j ; } } swap(array,i,smallest) ; } } PS:从测试的角度看, 算法或多或少存在些问题,第一:边界问题,
第二, 是否存在已经提前排好顺序, 但是还会再排一次。
第三,数据类型, 比如说 时间排序, 字符排序,
转载地址:http://arcci.baihongyu.com/