闲着没事儿,就写了个简单的排序算法。
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;
}