public class TestSort {
public static void selectSort(int[]a) {//选择排序法
int i;
int j;
int tmp;
for(i=0;i<a.length;i++) {
for(j=i+1;j<a.length;j++) {
if(a[i]>a[j]) {
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
}
public static void insertSort(int[] a) {//插入排序
if(a!=null) {
for(int i=1;i<a.length;i++) {
int temp=a[i];
int j=i;
if(a[j-1]>temp) {
while(j>=1&&a[j-1]>temp) {
a[j]=a[j-1];
j--;
}
}
a[j]=temp;
}
}
}
public static void BubbleSort(int a[]) {//冒泡排序
int tmp;
for(int i=0;i<a.length;i++) {
for(int j=1;j<a.length-i;j++) {
if(a[j-1]>=a[j]) {
tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
}
public static void Merge(int a[],int p,int q,int r) {//归并排序将两个有序数组合并到一起
//p排序的起点,q排序的中间分界点,r排序的终点
int n1=q-p+1;
int n2=r-q;
int L[]=new int[n1];
int R[] = new int [n2];
for(int i=0,k=p;i<n1;i++,k++) {
L[i]=a[k];
}
for(int i=0,k=q+1;i<n2;i++,k++) {
R[i]=a[k];
}
int i=0,j=0,k=p;
while(i<n1&&j<n2) {
if(L[i]<R[j]) {
a[k]=L[i];
i++;
k++;
}
else {
a[k]=R[j];
j++;
k++;
}
}
if(i<n1) {
for(j=i;j<n1;j++,k++) {
a[k]=L[j];
}
}
if(j<n2) {
for(i=j;i<n2;i++,k++) {
a[k]=R[i];
}
}
}
public static void MergeSort(int a[],int p,int r) {//递归排序
if(p<r) {
int q=(p+r)/2;//取商
MergeSort(a,p,q);
MergeSort(a,q+1,r);
Merge(a,p,q,r);
}
}
public static void sort(int a[],int low,int high) {//快排
if(low>high)
return;
int i = low;
int j = high;
int key=a[i];
while(i<j) {
while(a[j]>key&&i<j) {
j--;
}
if(i<j) {
a[i++]=a[j];
}
while(a[i]<key&&i<j) {
i++;
}
if(i<j) {
a[j--]=a[i];
}
}
a[i]=key;
sort(a,low,i-1);
sort(a,i+1,high);
}
public static void quickSort(int a[]) {
sort(a,0,a.length-1);
}
public static void shellSort(int a[]) {//希尔排序
int len = a.length;
int i,j,h,temp;
for(h=len/2;h>0;h=h/2) {//步长选择
for(i=h;i<len;i++) {
temp=a[i];
for(j=i-h;j>=0;j-=h) {
if(temp<a[j])
a[j+h]=a[j];
else
break;
}
a[j+h]=temp;
}
}
}
public static void main(String[]args) {
int a[]= {18,12,32,14,25};
shellSort(a);
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
System.out.println("\n");
}
}
Java的各种排序
于 2019-03-26 23:00:42 首次发布