1 import java.util.Scanner;
  2 
  3 public class OrderBy {
  4 
  5     public static void main(String[] args) {
  6 //        Scanner scan = new Scanner(System.in);
  7 //        System.out.println("1到n的和,请输入n···");
  8 //        int i = scan.nextInt();
  9         System.out.println(fun(100));//递归
 10         
 11         int[] aArray = {7,5,3,8,2,9,1,4,6};//目标数组
 12         orderBy1(aArray);//选择排序
 13         orderBy2(aArray);//冒泡排序
 14         orderBy3(aArray);//插入排序
 15     }
 16     /**
 17      * 递归
 18      * @param i
 19      * @return
 20      */
 21     private static int fun(int i){
 22         
 23         if(i==1){
 24             return 1;//递归基数(1到1的和为1)
 25         }
 26         else{
 27             int sum = i+fun(i-1);//i加1到(i-1)的和
 28             /**
 29              * 其中fun(i-1) = (i-1)+fun(i-2),以此类推
 30              */
 31             return sum;
 32         }
 33     }
 34     /**
 35      * 排序1
 36      * 选择
 37      */
 38     private static void orderBy1(int[] aArray){
 39         
 40         for(int i=0;i<aArray.length;i++){
 41             int var=aArray[i];//每次初值为第一位
 42             for(int j=i;j<aArray.length;j++){//从索引i开始
 43                 var = var<aArray[j]?var:aArray[j];//三元取较小值
 44             }
 45             for(int j=i;j<aArray.length;j++){//从索引i开始让最小值和i为互换位置
 46                 if(aArray[j]==var){
 47                     aArray[j]=aArray[i];
 48                     aArray[i]=var;
 49                 }
 50             }
 51         }
 52         for(int m:aArray){//for each遍历新数组
 53             System.out.print(m+"\t");
 54         }
 55         System.out.println();
 56     }
 57     /**
 58      * 排序2
 59      * 冒泡
 60      */
 61     private static void orderBy2(int[] arr){
 62         
 63         for(int i=0;i<arr.length-1;i++){
 64             int var = arr[i];
 65             if(var>arr[i+1]){//互换位置,小的排前面
 66                 arr[i] = arr[i+1];
 67                 arr[i+1] = var;
 68                 i=-1;//重新遍历
 69             }
 70         }
 71         for(int m:arr){
 72             System.out.print(m+"\t");
 73         }
 74         System.out.println();
 75     }
 76     /**
 77      * 排序3
 78      * 插入
 79      */
 80     private static void orderBy3(int[] arr){
 81         for(int i=1;i<arr.length;i++){//遍历
 82             //逐个与排完序部分比较,第一次遇到比之大的数时则插入该数的位置,将后面部分往后挤
 83             int var = arr[i];
 84             No1:for(int j=0;j<i;j++){
 85                 if(var<arr[j]){
 86                     for(int m=i;m>=j;m--){//j到i之间的元素后移1位
 87                         if(m>j){
 88                             arr[m]=arr[m-1];//j之后i之前的元素后移一位
 89                         }else{
 90                             arr[j]=var;//把var插入到j索引处
 91                         }
 92                     }
 93                     break No1;//遇到第一个比var大的数,排完序后结束比较
 94                 }
 95             }
 96         }
 97         for(int n:arr){
 98             System.out.print(n+"\t");
 99         }
100         System.out.println();
101     }
102 }

 

结果:

 

posted on 2017-08-07 12:59  云上咖啡  阅读(1858)  评论(0编辑  收藏  举报