JAVA实现数组排序各种算法



public class AllKindsSort {
 
 //冒泡排序
 static void bubble(int[] a) {
  for(int i=1;i<a.length;i++) {
   for(int j=0;j<a.length-1;j++) {
    if(a[j]>a[j+1]) {
     int temp = a[j];
     a[j] = a[j+1];
     a[j+1] =temp;
    }
   }
  }
 }
 
 //选择排序
 static void choice(int[] a) {
  for(int i=0;i<a.length;i++) {
   for(int j=i+1;j<a.length;j++) {
    if(a[i]>a[j]) {
     int temp = a[i];
     a[i] = a[j];
     a[j] = temp;
    }
   }
  }
 }
 
 //插入排序
 static void insert(int[] a) {
  
  int temp=0;
  int j=0;
     for(int i=1;i<a.length;i++) {
      if(a[i]<a[i-1]) {
       temp = a[i];
       for(j=i-1;j>=0&&temp<a[j];j--) {
        a[j+1] = a [j];
       }
       a[j+1] = temp;
      }
     }  
  
 }
 
 //归并排序
 static void merge(int[] a,int left,int right) {
  int t = 1;
  int size = right-left+1;
  while(t<size) {
   int s = t;
   t = 2*s;
   int i = left;
   while(i+(t-1)<size) {
    mergeSort(a,i,i+(s-1),i+(t-1));
    i+=t;
   }
   
   if(i+(t-1)>=size) {
    if(i+(s-1)<=right) {
     mergeSort(a,i,i+(s-1),right);
    }
   }
  }
 }
 
 static void mergeSort(int[] a,int p,int q,int r) {
  
  int[] b = new int[a.length];
  int s = q+1;
  int m = p;
  
  int k = p;
  while(m<=q&&s<=r) {
   if(a[m]>=a[s]) {
    b[k++] = a[s++];
   }else {
    b[k++] = a[m++];
   }
  }
  
  while(m<=q) {
   b[k++] = a[m++];
  }
  
  while(s<=r) {
   b[k++] = a[s++];
  }
  
  for(int i=p;i<=r;i++) {
   a[i] = b[i];
  }
 }
 
 //希尔排序
 static void hill(int[] a) {
  int d = a.length;
  while(d!=0) {
   d = d/3;
   int k = d ;
   if(k==0) {
    k=1;
   }
   
   for(int x=0;x<k;x++) {
       for(int i=x+k;i<a.length;i+=k) {
           int temp = a[i];
           int j = i-k;
           for(;j>=0&&temp<a[j];j-=k) {
            a[j+k] = a[j];
           }
           a[j+k] = temp;
       }
   }
  }
  
 }
 
 //快速排序
 static void quick(int[] a,int start,int end) {
  
  int base = a[start];
  int i = start;
  int j = end;
 
  do {
   while((a[i]<base)&&i<end) {
    i++;
   }
   
   while((a[j]>=base)&&j>start) {
    j--;
   }
   
   if(i<=j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    i++;
    j--;
   }
  }while(i<=j);
  
  if(i<=end) {
   quick(a,i,end);
  }
  
  if(j>=start) {
   quick(a,start,j);
  }
 }
 
 //计数排序
 static int[] count(int[] a) {
  
  int max=0;
  
  for(int i:a) {
   if(i>max) {
    max = i;
   }
  }
  
  int[] c = new int[max+1];
  int[] b = new int[a.length];
  
  for(int i=0;i<c.length;i++) {
   c[i] = 0;
  }
  
  for(int i=0;i<a.length;i++) {
   c[a[i]] = c[a[i]]+1;
  }
  
  for(int i=1;i<c.length;i++) {
   c[i] = c[i]+c[i-1];
  }
  
  for(int i=a.length-1;i>=0;i--) {
     b[c[a[i]]-1] = a[i];
     c[a[i]] = c[a[i]]-1;
  }
  
  return b;
 }
 
 //基数排序
 static void base(int[] a) {
   
     int max=0;
     for(int i:a) {
      if(i>max) {
        max = i;
      }
     }
    
     int time = 0;
     while(max!=0) {
      max = max/10;
      time++;
     }
    
     List<ArrayList> que = new ArrayList<ArrayList>();
    
     for(int i=0;i<10;i++) {
      ArrayList<Integer> que1 = new ArrayList<Integer>();
      que.add(que1);
     }
     for(int i=0;i<time;i++) {
      
      for(int j=0;j<a.length;j++) {
       int m = (a[j]%(int)((Math.pow(10, i+1)))/(int)((Math.pow(10, i))));
       
       ArrayList<Integer> que2 = que.get(m);
       que2.add(a[j]);
       que.set(m, que2);
       
      }
      
      int count=0;
      for(int k=0;k<10;k++) {
       while(que.get(k).size()>0) {
        ArrayList<Integer> que3 = que.get(k);
        a[count] = que3.get(0);
        que3.remove(0);
        count++;
       }
      }
     }
    
 }
 
 //堆排序
 static void heap(int[] a,int m) {
  
  int temp = a[m];
  for(int j=2*m+1;j<a.length;j*=2) {
   if(j<a.length-1&&a[j]<a[j+1]) {
    ++j;
   }
   
   if(temp>a[j]) {
    break;
   }
   
   a[m] = a[j];
   m=j;
  }
  
    a[m] = temp;
 }
 
 static void heapSort(int[] a) {
  for(int i=a.length/2-1;i>=0;i--) {
   heap(a,i);
  }
 }
 
 static int[] afreshSort(int[] a) {
  for(int i=1;i<a.length;i++) {
   a[i-1] = a[i];
  }
  return Arrays.copyOf(a,a.length-1);
 }
 
 //全排序
 static void allSort(int[] a,int start) {
  if(start==a.length) {
   System.out.println(Arrays.toString(a));
  }else {
   for(int m = start;m<a.length;m++) {
    swap(a, start, m);
    allSort(a, start+1);
    swap(a,m,start);
   }
  }
 }
 
 static void swap(int[] a,int m,int n) {
  int temp = a[m];
  a[m]=a[n];
  a[n]=temp;
 }
 public static void main(String[] args) {
  
  for(int i=1;i<11;i++) {
    switch (i) {
  case 1:
   int[] a = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};

   bubble(a);
   System.out.println(Arrays.toString(a));
   break;
  case 2:
   int[] b = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};

   choice(b);
   System.out.println(Arrays.toString(b));
   break;
  case 3:
   int[] c = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};

   insert(c);
   System.out.println(Arrays.toString(c));
   break;
  case 4:
   int[] d = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};

   merge(d, 0, 31);
   System.out.println(Arrays.toString(d));
   break;
  case 5:
   int[] e = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};

   hill(e);
   System.out.println(Arrays.toString(e));
   break;
  case 6:
   int[] f = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};

   quick(f, 0, 31);
   System.out.println(Arrays.toString(f));
   break;
  case 7:
   int[] g = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};
  
   System.out.println(Arrays.toString(count(g)));
   break;
  case 8:
   int[] h = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};
  
   base(h);
   System.out.println(Arrays.toString(h));
   break;
  case 9:
   int[] j = new int[] {4,6,2,3,9,1,7,8,34,21,56,35,37,86,44,20,101,408,74,78,33,0,300,302,206,245,114,67,23,68,579,455};

   int[] temp = new int[j.length];
   for(int m=j.length-1;m>=0;m--) {
    heapSort(j);
    temp[m] = j[0];
    j=afreshSort(j);
   }
   System.out.println(Arrays.toString(temp));
   break;
  case 10:
  int[] k = new int[] {4,6,2,3};

  allSort(k,0);
  break;
  }  
    
  }
 }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值