自己写的一个数字数组排序算法


闲着没事儿,就写了个简单的排序算法。


import org.apache.commons.lang3.ArrayUtils;

/**

 * 迭代排序数字数组

 * 原理:(1)每次迭代都返回数组的最后值存入最终数组,最后值在比较循环中始终赋值为最大值或最小值

 *     (2)在比较循环前移除两个数组的交集,避免重复比较

 * @author Administrator

 *

 */

public class Testd {

public static void main(String args[]) {

int[] arr = {55,23,7,2,3,1,4,5,8,6,12};

int[] suffix = new int[arr.length];

/**

* for循环原始数据,迭代比较方法,将每次返回的结果作为值放入最终数组里面

*/

for(int i=0;i<arr.length;i++) {

suffix[i] = compareTo(arr,suffix);

}

for(int j=0;j<suffix.length;j++) {//打印输出最后的最终数组结果

System.out.print(suffix[j]+" ");

}

}


public static int compareTo(int[] arr,int[] suffix) {

arr = ArrayUtils.removeElements(arr,suffix);//移除arr所有的交集元素,排除已经比较出的结果

if(arr.length<2) {//只有一个元素了

return arr[0];

}

/**

* for循环,始终让met[i+1]为最大值,比较直到for循环结束,将met[met.length-1]作为返回值返回

*/

for(int i=0;i<arr.length;i++) {

if(i<arr.length-1) {

if(arr[i]>=arr[i+1]) {//若需要返回最小值,只需要改为<=

arr[i+1]=arr[i];

} else {//如果arr[i]为最后一个元素

if(arr[i]<=arr[i-1]) {//若需要返回最小值,只需要改为>=

arr[i]=arr[i-1];

}}

}

return arr[arr.length-1];

}

}


上面的那个是调用方迭代,下面弄个内部双层for循环:


public static int[] compareTo(int[] arr) {

int[] suffix = new int[arr.length];

int[] met;

for(int j=0;j<arr.length;j++) {

met = ArrayUtils.clone(arr);

met = ArrayUtils.removeElements(met,suffix);//移除arr所有的交集元素,排除已经比较出的结果

if(met.length<2) {//只有一个元素了

suffix[j] = met[0];

}

/**

* for循环,始终让met[i+1]为最大值,比较直到for循环结束,将met[met.length-1]作为返回值返回

*/

for(int i=0;i<met.length;i++) {

if(i<met.length-1) {

if(met[i]>=met[i+1]) {//若需要返回最小值,只需要改为<=

met[i+1]=met[i];

}}

suffix[j] = met[met.length-1];

}

return suffix;

}


你可能感兴趣的:(java,排序,算法,数组)