import java.util.Arrays;
public class Sort {
//冒泡排序(从头到尾排)
public static void bubbleSort(int[] arrays)
{
//第一次循环从第一个元素开始,到倒数第二个元素
for(int i=0;i<arrays.length-1;i++)
{
for(int j=1;j<arrays.length-i;j++)
{
if(arrays[j-1]>arrays[j])
{
int temp=arrays[j-1];
arrays[j-1]=arrays[j];
arrays[j]=temp;
}
}
}
}
//选择排序
public static void selectSort(int[] arrays)
{
//第一次循环从第一个元素开始,到倒数第二个元素
for(int i=0;i<arrays.length-1;i++)
{
//标识当前的最小元素的位置
int ind=i;
for(int j=i+1;j<arrays.length;j++)
{
if(arrays[j]<arrays[ind])
{
ind=j;
}
}
if(ind!=i)
{
int temp=arrays[ind];
arrays[ind]=arrays[i];
arrays[i]=temp;
}
}
}
//插入排序
public static void insertSort(int[] arrays)
{
//第一次循环从第二个元素开始,到最后一个元素
//arrays[i]是当前需要插入的元素
for(int i=1;i<arrays.length;i++)
{
//当前已经排好序的数组长度是i
int temp=arrays[i];
int ind=i;
for(int j=i-1;j>=0;j--)
{
//如果找到了比arrays[j]小的,那么就将已经排好序的数组的当前位置后的所有元素后移一位,并将需要插入的元素放入该位置j
if(temp<arrays[j])
{
arrays[j+1]=arrays[j];
ind=j;
}
else
{
break;
}
}
arrays[ind]=temp;
}
}
//快速排序
public static void quickSot(int[] arrays,int left,int right)
{
if(left>=right)
{
return;
}
int compInd=left;//选取第一个数作为比较的基石
int i=left;
int j=right;
while(i<j)
{
for(;j>=i;j--)
{
if(arrays[j]<arrays[compInd])
{
int temp=arrays[j];
arrays[j]=arrays[compInd];
arrays[compInd]=temp;
compInd=j;
break;
}
}
for(;i<=j;i++)
{
if(arrays[i]>arrays[compInd])
{
int temp=arrays[i];
arrays[i]=arrays[compInd];
arrays[compInd]=temp;
compInd=i;
break;
}
}
}
quickSot(arrays,left,compInd-1);
quickSot(arrays,compInd+1,right);
}
//归并排序(两个有序的数组)
public static int[] merger(int[] a,int [] b)
{
int[] result=new int[a.length+b.length];
int ind=0;
int ind1=0;
int ind2=0;
while(ind1<a.length && ind2<b.length)
{
if(a[ind1]<b[ind2])
{
result[ind++]=a[ind1++];
}
else
{
result[ind++]=b[ind2++];
}
}
while(ind1<a.length)
{
result[ind++]=a[ind1];
ind1++;
}
while(ind2<b.length)
{
result[ind++]=b[ind2];
ind2++;
}
return result;
}
//希尔排序 steps为增量数组,前面的元素大于后面的元素,并且最后一个元素值为1 ,例如{ 5, 3, 1 }
public static void shellSort(int[] arrays,int[] steps)
{
for(int step:steps)
{
for(int i=0;i<step;i++)
{
for(int j=i;j<arrays.length;j+=step)
{
//选择排序
int ind=j;
for(int k=j+step;k<arrays.length;k+=step)
{
if(arrays[k]<arrays[ind])
{
ind=k;
}
}
if(ind!=j)
{
int temp=arrays[ind];
arrays[ind]=arrays[j];
arrays[j]=temp;
}
}
}
}
}
public static void main(String[] args) {
int[] a=new int[]{6,3,13,8,5,10,12,16,4,6};
// bubbleSort(a);
// selectSort(a);
// insertSort(a);
// quickSot(a,0,a.length-1);
shellSort(a,new int[]{ 5, 3, 1 });
System.out.println(Arrays.toString(a));
}
}