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;
}
}
}
}