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

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值