1.选择排序:首先找到数组中最小的那个元素,其次将它和数组第一个元素交换位置,再次,在剩下的元素中寻找最小的元素,将它与数组第二个元素交换。直到整个数组排序完毕。
public void Selection(int[] a)
{
int N=a.length();
for(int i=0;i<N;i++)
{ int min=i;
for(int j=i+1;j<N;j++)
{ if(less(a[j],a[min]))
min=j;{
exch(a,i,min);
}
}
public bool less(int a,int b)
{
if(a<b)
return true;
else
return false;
}
public void exch(int[] a,x,y)
{
int temp=0;
temp=a[x];
a[x]=a[y];
a[y]=temp;
}
2.插入排序:从数组的开头开始,依次比较现有值与它前一位值的大小,然后进行交换,这样到数组尾执行完交换后,数组就排序完毕了。
public void Insertion(int [] a)
{
int N=a.length();
for(int i=0;i<N;i++)
{
for(int j=i;j>0&&if(less(a[j],a[j-1]);j--)
exch(a,j,j-1);
}
}
public bool less(int a,int b)
{
if(a<b)
return true;
else
return false;
}
public void exch(int[] a,x,y)
{
int temp=0;
temp=a[x];
a[x]=a[y];
a[y]=temp;
}
3.希尔排序:希尔排序是插入排序的升级版,因为大规模的插入排序效率很低,他只能一次次地让更小的元素向前移动,希尔排序为了加快速度,采用了交换不相邻元素以对数组进行局部排序。并最终用插入排序将局部有序的数组排序。主要思想是使得数组中间隔为h的元素都是有序的,成为h有序数组,用插入排序对h个子数组进行排序,让h每次排序之后不断缩小再进行排序,当h为1时,数组有序。
public void Shell(int[] a)
{
int N=a.length;
int h=1;
while(h<N/3)
h=3*h+1;//+1保证最后h变为1
while(h>=1)
{
for(int i=h;i<N;i++)
for(int j=i;j>=h&&less(a[j],a[j-h]);j-=h)
exch(a,j,j-h);
h=h/3;
}
public bool less(int a,int b)
{
if(a<b)
return true;
else
return false;
}
public void exch(int[] a,x,y)
{
int temp=0;
temp=a[x];
a[x]=a[y];
a[y]=temp;
}