冒泡法和选择法排序的比较

1.

冒泡法:每一次排序过程,通过相邻元素的两两交换,将当前没有排好序中的最大数移到数组的最右端。

代码如下:

void bubble(int a[ ],int n)
{
       int i,j,t;
       for(i=0;i<n-1;i++)   //这里的i仅用作大循环的次数,大循环9次,因为最后一个数自动冒顶
             for(j=0;j<n-1-i;j++)
            {
               if(a[j]>a[j+1])
               {
                   t=a[j];
                  a[j]=a[j+1];
                  a[j+1]=t;
               }
           }
}


2.选择法::每一次排序过程,我们获取当前没有排好序中的最小的元素和数组最左端的元素交换,循环这个过程即可实现对整个数组排序。 
数组最左端的元素是变化的(没排好序的),因此外循环用来确定最左端元素(的下标),而非如冒泡法的外循环仅用来计数大循环。
还需要一个值用来存放最小值的下标。通过比较、替换,把最小数的下标存在这个变量中(但不进行数的交换),当比较完无序数组后,我们得到这组无序数组最小值的下标值,通过这个下标把最小的元素和无序数组最左端的元素交换。

void sort(int a[],int n)
{
     int i,j,k,t;
     for(i=0;i<9;i++)
     {
         k=i;            //先默认最小值的下标就是i
         for(j=i+1;j<10;j++)
          {
             if(a[j]<a[i])
             {
                 k=j;
              }
          }
          t=a[k];       //通过这个下标,我们把最小的元素和数组最左端的元素(未排序的)交换
          a[k]=a[i];
          a[i]=t;                    
      }
}

3.实际上,以下代码也是可以实现同样功能的

void sort(int a[],int n)
{
      int i,j,t;
      for(i=0;i<9;i++)
      {
         for(j=i+1;j<10;j++)
         {
             if(a[j]<a[i])
             {
                 t=a[i];
                 a[i]=a[j];
                 a[j]=t;
              }
           }
      }
}

4.

排序法

 平均时间

最差情形

稳定度

额外空间

备注

冒泡

 O(n2)

  O(n2)

 稳定

O(1)

n小时较好

交换

  O(n2)

  O(n2)

不稳定

O(1)

n小时较好

选择

 O(n2)

 O(n2)

不稳定

O(1)

n小时较好

插入

 O(n2)

 O(n2)

稳定

O(1)

大部分已排序时较好

基数

O(logrd)

O(logrd)

稳定

O(n)

d是关键字项数(0-9),

r是基数(个十百)

Shell

O(nlogn)

O(ns) 1<s<2

不稳定

O(1)

s是所选分组

快速

O(nlogn)

O(n2)

不稳定

O(nlogn)

n大时较好

归并

O(nlogn)

O(nlogn)

稳定

O(1)

n大时较好

O(nlogn)

O(nlogn)

不稳定

O(1)

n大时较好



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值