1 package Test2;
  2 
  3 //排序:Sort
  4 public class Sort 
  5 {
  6     public static void main(String[] args) 
  7     {    
  8         int[] data = {4,3,5,1,2};        //声明需要排序的数组
  9             
 10 //        SelectionSort.Select(data);        //通过类名调用方法
 11 //        BubbleSort.Bubble(data);
 12         InsertionSort.Insert(data);
 13         
 14         
 15         for(int i=0;i<data.length;i++)    //通过for循环遍历数组
 16         System.out.print(data[i]);
 17                 
 18 //        for(int n:data)                    //通过增强for循环遍历数组
 19 //        System.out.print(n);
 20     }
 21 }
 22 
 23 //选择排序:主要思想是寻找未排序中最小的元素加入到已有序列,直到未排序序列为空
 24 class SelectionSort
 25 {
 26     public static void Select(int data[])
 27     {
 28         
 29         for(int i=0;i<data.length;i++)                    //循环分割有序和无序部分,取到最小值放到无序的第一个位置
 30         {
 31 //            System.out.println("---------第"+(i+1)+"次循环---------");
 32             int smaller = i;                            //设定一个值,依次跟每一个值比较,来确定最小值
 33 //            int b=0;                                    //记录比较次数
 34             for(int sum=i+1;sum<data.length;sum++)        //最多需要sum次比较就能取得最小值
 35             {
 36 //                b++;
 37 //                System.out.println("第"+b+"次比较"+"[smaller]="+data[smaller]+"\t"+"[sum]="+data[sum]);
 38                 if(data[smaller]>data[sum])                //如果最小值大于比较值
 39                 {
 40                     smaller = sum;                        //通过下标赋值最小值继续跟后面的值比较
 41 //                    System.out.println("赋值较小值"+"[smaller]="+data[smaller]);
 42                 }
 43             }
 44 //            System.out.println("找到最小值"+data[smaller]+"\t"+"如果找到的最小值不是当前第一个位置就互换两个值的位置");
 45 //            System.out.println("最小值位置:smaller="+smaller+"\t"+"第一个值位置:i="+i);
 46                 if(smaller != i)                        //如果找到的最小值不是当前第一个位置
 47                 {
 48 //                    System.out.println("换值前"+"[smaller]="+data[smaller]+"\t"+"[i]="+data[i]);
 49                     int tempData = data[smaller];        //就互换两个值的位置
 50                     data[smaller] = data[i];
 51                     data[i] = tempData;    
 52 //                    System.out.println("换值后"+"[smaller]="+data[smaller]+"\t"+"[i]="+data[i]);
 53                 }
 54         }
 55     }
 56 }
 57 //冒泡排序:主要思想是进行相邻的两个元素之间比较并且交换,原则是将较大值放在最后面,有利于利用原有元素在集合中的位置优势
 58 class BubbleSort
 59 {
 60     public static void Bubble(int data[])
 61     {
 62         int temp;                                                //创建一个值用来交换位置
 63         for(int i=0;i<data.length-1;i++)                        //至多排序i次,就能排出顺序
 64         {
 65 //            System.out.println("排序"+(i+1)+"次");
 66             for(int j=0;j<data.length-1-i;j++)                    //轮循开始后数组最后一个值已经排好无序再排
 67             {
 68 //                System.out.println(data[j]+"\t"+data[j+1]);        
 69                 if(data[j]>data[j+1])                            //如果相邻两个值前面比后面大
 70                 {        
 71                     
 72                     temp = data[j];                                //交换二者位置                
 73                     data[j] = data[j+1];
 74                     data[j+1] = temp;
 75                     
 76 //                    for(int ii=0;ii<data.length;ii++)
 77 //                    System.out.print(data[ii]);
 78 //                    System.out.println("");
 79                 }
 80             }
 81 
 82         }
 83     }
 84 }
 85 //插入排序:主要思想是随意选取一个无序部分元素到有序部分中,寻找它所在的位置进行插入,保持有序部分仍然有序
 86 class InsertionSort
 87 {
 88     public static void Insert(int data[])
 89     {
 90         int current;                        //创建一个值用来  43512
 91         for (int i=1;i<data.length;i++)        //假定第一个元素就是有序部分,所以从第二个位置开始
 92         {
 93 //            System.out.println("第"+i+"次循环");
 94             current = data[i];                //从第二个位置开始选取无序值
 95 //            System.out.println("选择需要插入的无序值"+current);
 96             for (int j=i-1;j>=0;j--)
 97             {            
 98                 if(current<data[j])            //如果无序值小于前一个有序值
 99                 {
100 //                    System.out.println("如果无序值"+current+"<"+"有序值"+data[j]);
101                     data[j+1] = data[j];
102 //                    System.out.println("就放在后面");
103 //                    for(int ii=0;ii<data.length;ii++)
104 //                        System.out.print(data[ii]);
105 //                        System.out.println("");
106                 }
107                 else
108                 {
109 //                    System.out.println("如果无序值"+current+">"+"有序值"+data[j]);
110                     data[j+1] = current;
111 //                    System.out.println("就放在后面");
112 //                    for(int ii=0;ii<data.length;ii++)
113 //                        System.out.print(data[ii]);
114 //                        System.out.println("");
115                     break;
116                 }
117                 if(j == 0 )
118                 {
119 //                    System.out.println("如果有序值在第一个位置");
120                     
121                     data[j] = current;
122 
123 //                    for(int ii=0;ii<data.length;ii++)
124 //                        System.out.print(data[ii]);
125 //                        System.out.println("");
126                 }
127             }
128         }
129     }
130 }