首页 > 代码库 > JAVA中的数组排序算法

JAVA中的数组排序算法

1.各种排序图解:

技术分享

代码实现

技术分享
  1 import java.util.Arrays;
  2 
  3 public class ArraySort {
  4     //选择排序
  5     public static void slecteSort(int[] arr){
  6         System.out.println(Arrays.toString(arr));
  7         for(int i=0;i<arr.length;i++){
  8             int minIndex=i;
  9             for(int j=i+1;j<arr.length;j++){
 10                 if(arr[minIndex]>arr[j]){
 11                     minIndex=j;
 12                 }
 13             }
 14             if(minIndex!=i){
 15                 int temp=arr[i];
 16                 arr[i]=arr[minIndex];
 17                 arr[minIndex]=temp;
 18             }
 19         }
 20         System.out.println(Arrays.toString(arr));
 21     }
 22     //冒泡排序
 23     public static void bubSort(int[] arr){
 24         for(int i=0;i<arr.length-1;i++){            //控制比较次数:n-1次(n表示元素个数)
 25             /*
 26              * 控制相邻的两个元素比较,如果说后者小,就进行交换。
 27              * 因为每次外循环之后,都会找到一个最大值放在最后面
 28              * 所以说j能取到的最大值,应该依次减小。(j<arr.length-1-i)
 29              */
 30             for(int j=0;j<arr.length-i-1;j++){        
 31                 if(arr[j]>arr[j+1]){
 32                     int b=arr[j+1];
 33                     arr[j+1]=arr[j];
 34                     arr[j]=b;
 35                 }
 36                 System.out.println("arr第"+(i+1)+"次外循环,第"+(j+1)+"次比较后:"+Arrays.toString(arr));
 37             }
 38         }
 39         System.out.println(Arrays.toString(arr));
 40     }
 41     //插入排序
 42     public static void insertSort(int[] arr){
 43 
 44         for(int i=1;i<arr.length;i++){ 
 45             /*
 46              * 因为第一个拿出来要作比较的数,前面必须要有数,所以i从1开始
 47              */
 48             int temp=arr[i];            //temp  临时数据
 49             int index=0;
 50             /*
 51              * j一定要从外循环去除到temp数的前一个开始,一直往前面遍历,如果一直找不到比去除到temp数小的数,就到
 52              * j==-1的时候结束。
 53              * 否则,到找到比temp里面数还要小的数结束
 54              */
 55             for(int j=i-1;j>=-1;j--){
 56                 index++;
 57                 System.out.println("arr第"+i+"次外循环,第"+index+"次比较"+Arrays.toString(arr));
 58                 if(j==-1){                //如果找到最前面的没有元素可找了,就把temp放入到最前面的arr[0];
 59                     arr[0]=temp;
 60                     break;
 61                 }
 62                 if(temp<arr[j]){
 63                     arr[j+1]=arr[j];    //如果找到的元素比temp大,就往后面走一位
 64                 }else{
 65                     arr[j+1]=temp;        //如果找到元素比temp小,就在该数后面放入temp
 66                     break;                //并跳出本次循环
 67                 }
 68             }
 69         }
 70     }
 71     //递归算法——阶乘,世纪的计算过程是从最后一步开始计算
 72     public static void factorial(int b){
 73         int a=1;
 74         for (int i=1;i<=b;i++) {
 75             a*=i;
 76         }
 77         System.out.println(a);
 78     }
 79     public static int factorial1(int i){
 80         while(i!=1){
 81             System.out.println(i+"x"+(i-1)+"!");
 82         return factorial1(i-1)*i;
 83         } 
 84         return 1;
 85     }
 86     //
 87     public static void merge(int[] arr,int left,int mid,int right){
 88         int[] temp=new int[right-left+1];
 89         int low1=left;
 90         int low2=mid+1;
 91         int index=0;
 92         while(low1<=mid&&low2<=right){
 93             if(arr[low1]<arr[low2]){
 94                 temp[index++]=arr[low1++];
 95             }else {
 96                 temp[index++]=arr[low2++];
 97             }
 98         }
 99         while(low1<=mid){
100             temp[index++]=arr[low1++];
101         }
102         while(low2<=right){
103             temp[index++]=arr[low2++];
104         }
105         System.out.println("left="+left);
106         System.out.println("arr="+Arrays.toString(arr));
107         for(int i=0;i<index;i++){
108             arr[left++]=temp[i];
109         }
110         System.out.println("temp="+Arrays.toString(temp));
111         System.out.println("arr"+Arrays.toString(arr));
112         System.out.println("===================================");
113     }    
114     //递归的拆分一个数组
115     public static void cai(int[] arr,int left,int right){
116         int mid=(right+left)/2;
117         if(left<right){
118             cai(arr,left,mid);
119             cai(arr,mid+1,right);
120             merge(arr,left,mid,right);
121         }
122         System.out.println(Arrays.toString(arr));
123     }
View Code

 

JAVA中的数组排序算法