您的位置:首页 > 其它

算法复习2-3种初级排序

2016-03-06 19:39 375 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: