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 }
浙公网安备 33010602011771号