找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2516|回复: 1
收起左侧

数据结构-排序

[复制链接]
ID:108531 发表于 2016-3-12 16:09 | 显示全部楼层 |阅读模式
  没学数据结构之前,就知道冒泡排序呵呵!学了之后才知道排序有这么多种方法,真是不学不知道,一学吓一跳!那我们看看都有哪些排序方法吧!
一.插入排序
1.直接插入排序
2.折半插入排序
二.交换排序
1.冒泡排序
2.快速排序
三.选择排序
1.直接选择排序
2.堆排序
四.归并排序
1.归并2个有序序列
2.归并排序
呵呵一共四大类:7种排序方法.
可能还有其他更多的排序方法,只是还不为所知吧。先来看看第一类插入排序!
插入排序:故名思意就是把待元素一个一个插入到数组中,插入之前于前面的元素进行比较,然后决定插入的位置。
1.直接插入排序:
C语言:
typedef strcut
{    int key;
}NODE;
NODE a[Max];
#define Max 100
void disort(NODE a[],int n)
/*对存放在a[]中,长度为n的序列进行排序*/
{int i,j;
NODE temp;
for(i=1;i<n;i++)
{    temp=a;
     j=i-1;
     while(j>=0&&temp.key<a[j].key)
    {    a[j+1]=a;
         j--;
     }
     a[j+1]=temp;
}
}
VB:
Private Type NODE
    key as long
End Type
Private Sub disort(a() as NODE,ByVal n as long)
    Dim i as long,j as long,temp as NODE
    for i=1 to n-1
        temp=a(i)
        j=i-1
        Do While((j>0 or j=0) And (temp.key<a(j)))
            a(j+1)=a(j)
            j=j-1
        loop
        a(j+1)=temp
    next i
End Sub

回复

使用道具 举报

ID:108531 发表于 2016-3-12 16:10 | 显示全部楼层
2.折半插入排序
折半插入排序是对直接插入排序的一个改进,当数组元素较多时候,直接插入排序的效率不高.而折半排序能减少比较的次数,从而效率。我们来看看它是怎么减少比较次数的。
1.我们设3个变量low,high,mid,low为待比较的区间的最低位,high为待比较区间的最高位,mid为[low+mid]/2区间的中间位置.
2.我们比较中间位置和待插入元素的大小,若中间元素大于待插入元素那么只可能在中间元素的左边插入,我们令high=mid-1。若中间元素小于待插入元素,那么插入位置只可能在中间元素右边,此时我们令low=mid+1.
3.循环执行步骤2,直到low>high,此时high+1为插入的位置.我们再将high+1以后的元素依次后移,再将待插入的元素插入.
C:
void binsort(NODE a[],int n)
{    int low,high,mid,temp;
     int i,j;
     for(i=1;i<n;i++)
     {    low=0;
          high=i-1;
          temp=a.key;
          while(low<=high)
          {    mid=(low+high)/2;
               if(temp<mid) high=mid-1;
               else low=mid+1;
           }
          for(j=i-1;j>=high+1;j--) a[j+1]=a[j];
          a[j+1]=temp;
      }
}
VB:
Private Sub binsort( a() as NODE, n as long)
Dim low as long,high as long,mid as long,temp as long,i as long,j as long
    for i=1 to n-1
        low=0
        high=i-1
        temp=a(i).key
        Do While(low<high Or low=high)
           mid=int((low+high)/2)
           if temp<a(mid).key then
               high=mid-1
           else
               low=mid+1
           end if
        loop
        for j=i-1 to high+1 step -1
            a(j+1)=a(j)
        next j
        a(j+1)=temp
    next i
End Sub

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表